API-Dokumentation für Entwickler #
Die Vigoba REST API ermöglicht die programmatische Integration in deine Systeme. Erstelle, verwalte und automatisiere Goodie Bags direkt aus deiner Anwendung.
💡 Hinweis: API-Zugang ist im Large Plan verfügbar. Jetzt upgraden
Authentifizierung #
API-Token erstellen #
- Gehe zu Einstellungen → API-Tokens
- Klicke auf Token erstellen
- Vergib einen Namen (z.B. "Website Integration")
- Speichere den Token sicher – er wird nur einmal angezeigt!
Token verwenden #
Sende den Token im Authorization-Header:
Authorization: Bearer YOUR_API_TOKEN
Beispiel mit cURL #
curl -X GET "https://app.vigoba.de/api/v1/events"
-H "Authorization: Bearer YOUR_API_TOKEN"
-H "Accept: application/json"
Basis-URL #
https://app.vigoba.de/api/v1
Alle Requests gehen gegen diese Basis-URL.
Endpunkte #
Events #
Alle Events abrufen #
GET /events
Response:
{
"data": [
{
"id": 1,
"name": "Tech Conference 2026",
"slug": "tech-conference-2026",
"description": "Annual tech conference",
"location": "Berlin",
"start_date": "2026-03-15",
"end_date": "2026-03-17",
"created_at": "2026-01-10T10:00:00Z"
}
],
"meta": {
"current_page": 1,
"total": 15
}
}
Event erstellen #
POST /events
Body:
{
"name": "Workshop Q2",
"description": "Quarterly workshop",
"location": "Munich",
"start_date": "2026-04-01",
"end_date": "2026-04-01"
}
Event abrufen #
GET /events/{id}
Event aktualisieren #
PUT /events/{id}
Event löschen #
DELETE /events/{id}
Goodie Bags #
Alle Bags eines Events #
GET /events/{event_id}/bags
Bag erstellen #
POST /events/{event_id}/bags
Body:
{
"name": "VIP Goodie Bag",
"description": "Exclusive content for VIP attendees",
"protection_mode": "magic_link",
"design_slug": "modern-dark"
}
Protection Modes:
public– Öffentlich zugänglichpassword– Passwortgeschütztmagic_link– Magic Link per E-Mail
Bag abrufen #
GET /bags/{id}
Bag aktualisieren #
PUT /bags/{id}
Bag veröffentlichen #
POST /bags/{id}/publish
Goodies #
Alle Goodies eines Bags #
GET /bags/{bag_id}/goodies
Goody erstellen #
POST /bags/{bag_id}/goodies
Link-Goody:
{
"type": "link",
"title": "Visit our website",
"description": "Learn more about our products",
"url": "https://example.com",
"button_text": "Visit now"
}
Gutscheincode-Goody:
{
"type": "coupon",
"title": "20% Discount",
"description": "Valid until March 2026",
"code": "TECHCONF20"
}
Download-Goody:
{
"type": "download",
"title": "Speaker Slides",
"description": "All presentations as PDF",
"file_url": "https://..."
}
Goody aktualisieren #
PUT /goodies/{id}
Goody löschen #
DELETE /goodies/{id}
Goody-Reihenfolge ändern #
POST /bags/{bag_id}/goodies/reorder
Body:
{
"order": [3, 1, 4, 2]
}
Empfänger (für geschützte Bags) #
Alle Empfänger #
GET /bags/{bag_id}/recipients
Empfänger hinzufügen #
POST /bags/{bag_id}/recipients
Einzeln:
{
"email": "max@example.com",
"name": "Max Mustermann"
}
Mehrere:
{
"recipients": [
{"email": "max@example.com", "name": "Max"},
{"email": "anna@example.com", "name": "Anna"}
]
}
Magic Links versenden #
POST /bags/{bag_id}/recipients/send-magic-links
Alle Empfänger:
{}
Bestimmte Empfänger:
{
"recipient_ids": [1, 2, 3]
}
Fehlerbehandlung #
HTTP Status Codes #
| Code | Bedeutung |
|---|---|
| 200 | Erfolg |
| 201 | Ressource erstellt |
| 400 | Ungültige Anfrage |
| 401 | Nicht authentifiziert |
| 403 | Keine Berechtigung |
| 404 | Nicht gefunden |
| 422 | Validierungsfehler |
| 429 | Rate Limit erreicht |
| 500 | Server-Fehler |
Fehler-Response #
{
"error": {
"code": "validation_error",
"message": "The given data was invalid.",
"details": {
"name": ["The name field is required."]
}
}
}
Rate Limiting #
- 60 Requests pro Minute pro API-Token
- Headers zeigen verbleibende Requests:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1704067200
Webhooks (Ausgehend) #
Du kannst Webhooks konfigurieren, um bei bestimmten Events benachrichtigt zu werden.
Unterstützte Events #
bag.createdbag.publishedbag.accessedgoody.interactionrecipient.added
Webhook-Payload #
{
"event": "goody.interaction",
"timestamp": "2026-01-15T14:30:00Z",
"data": {
"bag_id": 123,
"goody_id": 456,
"interaction_type": "click",
"visitor_id": "abc123"
}
}
SDKs & Libraries #
Offiziell unterstützt:
- PHP:
composer require vigoba/php-sdk(coming soon) - JavaScript:
npm install @vigoba/sdk(coming soon)
Community:
- Python, Ruby, Go – Links folgen
Beispiel: Integration mit Node.js #
const axios = require('axios');
const api = axios.create({
baseURL: 'https://app.vigoba.de/api/v1',
headers: {
'Authorization': `Bearer ${process.env.VIGOBA_API_TOKEN}`,
'Accept': 'application/json'
}
});
// Event erstellen
async function createEvent(name, date) {
const response = await api.post('/events', {
name,
start_date: date,
end_date: date
});
return response.data;
}
// Goodie Bag mit Inhalt erstellen
async function createBagWithGoodies(eventId, bagName, goodies) {
// Bag erstellen
const bagResponse = await api.post(`/events/${eventId}/bags`, {
name: bagName,
protection_mode: 'public'
});
const bagId = bagResponse.data.id;
// Goodies hinzufügen
for (const goody of goodies) {
await api.post(`/bags/${bagId}/goodies`, goody);
}
// Veröffentlichen
await api.post(`/bags/${bagId}/publish`);
return bagResponse.data;
}
Support #
Bei Fragen zur API: api-support@vigoba.de
📚 Mehr erfahren: MCP-Integration für KI-Assistenten