API Dokumentation
Die PaymentHub API ermöglicht es dir, Members programmatisch zu verwalten,
Subscriptions zu steuern und Custom Metadata für deine Integration zu speichern.
Base URL
https://api.paymenthub.com/v1
Rate Limits
- 1000 requests per hour per API key
- Burst: 100 requests per minute
- Headers zeigen verbleibende Limits:
X-RateLimit-Remaining
Authentication
Alle API Requests müssen mit einem Bearer Token authentifiziert werden.
Header Authorization
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.paymenthub.com/v1/members
Members
GET
/members
List all members
Gibt eine paginierte Liste aller Members zurück.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page |
integer | Page number (default: 1) |
limit |
integer | Items per page (default: 20, max: 100) |
status |
string | Filter by status: active, trial, canceled |
plan_id |
string | Filter by plan ID |
Example Request
curl -X GET https://api.paymenthub.com/v1/members?status=active&limit=10 \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response
{
"members": [
{
"id": "mem_1234567890",
"email": "user@example.com",
"name": "Max Mustermann",
"plan_id": "plan_premium",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"metadata": {
"discord_id": "123456789",
"custom_field": "value"
}
}
],
"pagination": {
"total": 156,
"page": 1,
"per_page": 10,
"total_pages": 16
}
}
POST
/members
Create a member
Erstellt einen neuen Member mit optionaler Metadata.
Request Body
{
"email": "user@example.com",
"name": "Max Mustermann",
"plan_id": "plan_premium",
"trial_days": 7,
"metadata": {
"discord_id": "123456789",
"minecraft_uuid": "abc-def-ghi",
"server_roles": ["vip", "beta_tester"],
"custom_data": {
"level": 1,
"points": 0
}
}
}
Response
{
"id": "mem_1234567890",
"email": "user@example.com",
"name": "Max Mustermann",
"plan_id": "plan_premium",
"status": "trial",
"trial_ends_at": "2024-01-22T10:30:00Z",
"created_at": "2024-01-15T10:30:00Z",
"metadata": {
"discord_id": "123456789",
"minecraft_uuid": "abc-def-ghi",
"server_roles": ["vip", "beta_tester"],
"custom_data": {
"level": 1,
"points": 0
}
},
"subscription": {
"id": "sub_abc123",
"status": "trialing",
"next_payment": "2024-01-22T10:30:00Z"
}
}
PATCH
/members/{member_id}
Update member metadata
Aktualisiert die Metadata eines Members. Besonders nützlich für Server-Owner.
Use Cases für Server Owner
- Spieler-Level und Achievements speichern
- Discord Rollen synchronisieren
- In-Game Währung und Items tracken
- Custom Permissions verwalten
Request Body
{
"metadata": {
"discord_roles": ["premium", "og_member"],
"game_stats": {
"level": 42,
"experience": 15000,
"achievements": ["first_purchase", "year_member", "top_contributor"],
"inventory": {
"coins": 5000,
"premium_items": ["sword_legendary", "mount_dragon"]
}
},
"server_access": {
"survival": true,
"creative": true,
"skyblock": false,
"special_events": true
},
"last_active": "2024-01-15T10:30:00Z",
"total_playtime_hours": 250
}
}
Metadata System
Was ist Metadata?
Metadata erlaubt es dir, beliebige strukturierte Daten zu jedem Member zu speichern. Perfekt für Gaming-Server, Discord Communities und Custom Integrationen.
Pro Tipp: Du kannst bis zu 16KB JSON Data pro Member speichern!
Beispiele für Server Owner
Minecraft Server
{
"minecraft": {
"uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5",
"rank": "vip",
"homes": ["spawn", "shop", "base"],
"balance": 10000,
"playtime": 4320,
"last_seen": "2024-01-15"
}
}
Discord Bot
{
"discord": {
"user_id": "123456789012345678",
"roles": ["premium", "verified"],
"level": 25,
"xp": 12500,
"voice_minutes": 3600,
"messages_sent": 1500
}
}
FiveM Server
{
"fivem": {
"steam_id": "steam:110000132c6b978",
"character": {
"name": "John Doe",
"job": "police",
"bank": 50000,
"inventory": []
},
"whitelist": true,
"priority": 10
}
}
Game Server Network
{
"network": {
"total_score": 5000,
"unlocked_servers": [
"survival", "creative", "pvp"
],
"cosmetics": ["hat_crown", "pet_dragon"],
"friend_list": ["user123", "user456"],
"clan": "elite_warriors"
}
}
Webhooks
Event Types
Erhalte Real-time Notifications wenn wichtige Events passieren.
| Event | Description | Payload |
|---|---|---|
member.created |
Neuer Member registriert | Member object |
member.updated |
Member Daten aktualisiert | Member object + changes |
member.deleted |
Member gelöscht/gekündigt | Member ID + reason |
subscription.created |
Neue Subscription gestartet | Subscription object |
subscription.renewed |
Subscription verlängert | Subscription object |
subscription.canceled |
Subscription gekündigt | Subscription object + reason |
payment.succeeded |
Zahlung erfolgreich | Payment object |
payment.failed |
Zahlung fehlgeschlagen | Payment object + error |
Webhook Payload Example
{
"id": "evt_1234567890",
"type": "member.created",
"created": "2024-01-15T10:30:00Z",
"data": {
"member": {
"id": "mem_abc123",
"email": "user@example.com",
"plan_id": "plan_premium",
"metadata": {
"discord_id": "123456789"
}
}
}
}
Webhook Security
Alle Webhooks werden mit einem Signature Header gesendet:
X-PaymentHub-Signature: sha256=HMAC_SIGNATURE
Verifiziere die Signature mit deinem Webhook Secret:
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
hmac.update(payload);
const digest = 'sha256=' + hmac.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(digest)
);
}
Error Handling
Error Response Format
{
"error": {
"type": "invalid_request_error",
"message": "The email field is required",
"code": "parameter_missing",
"param": "email",
"request_id": "req_abc123"
}
}
HTTP Status Codes
| Code | Description |
|---|---|
| 200 | Request erfolgreich |
| 201 | Resource erstellt |
| 400 | Bad Request - Fehlerhafte Parameter |
| 401 | Unauthorized - API Key fehlt oder ungültig |
| 403 | Forbidden - Keine Berechtigung |
| 404 | Not Found - Resource nicht gefunden |
| 429 | Too Many Requests - Rate Limit erreicht |
| 500 | Internal Server Error |
SDK & Libraries
Node.js
npm install @paymenthub/node
const PaymentHub = require('@paymenthub/node');
const client = new PaymentHub('YOUR_API_KEY');
// Create member with metadata
const member = await client.members.create({
email: 'user@example.com',
plan_id: 'plan_premium',
metadata: {
discord_id: '123456789'
}
});
// Update metadata
await client.members.updateMetadata(member.id, {
level: 50,
achievements: ['first_purchase']
});
Python
pip install paymenthub
import paymenthub
client = paymenthub.Client('YOUR_API_KEY')
# Create member with metadata
member = client.members.create(
email='user@example.com',
plan_id='plan_premium',
metadata={
'discord_id': '123456789'
}
)
# Update metadata
client.members.update_metadata(
member.id,
{
'level': 50,
'achievements': ['first_purchase']
}
)