SaufApp Werbekunden API

Version 1.0 · Basis-URL: https://saufapp.eu/api/advertiser

Neu hier? Registriere deinen Werbekunden-Account unter /api/advertiser/register und warte auf die Admin-Freigabe. Nach Aktivierung kannst du Events direkt über die API in die SaufApp einspeisen.

Übersicht

Die SaufApp Werbekunden-API ermöglicht Veranstaltern, Clubs und Bars ihre Events direkt in die SaufApp zu importieren und zu verwalten. Events erscheinen sofort auf der Karte und in der Event-Liste für alle SaufApp-Nutzer auf Mallorca.

Was ist möglich?

Basis-URL

https://saufapp.eu/api/advertiser

Datenformat

Alle Requests und Responses verwenden JSON. Der Content-Type: application/json Header muss bei POST/PUT-Requests gesetzt werden.

Authentifizierung

Es gibt zwei Möglichkeiten, sich zu authentifizieren:

Methode 1: Bearer Token (empfohlen für Web-Portale)

Nach dem Login erhältst du einen Token, der 24 Stunden gültig ist.

# Login → Token holen
POST /api/advertiser/login

# Token bei jedem Request mitsenden
Authorization: Bearer eyJ1aWQiOjEsImlhdCI6...

Methode 2: API-Key + API-Secret (empfohlen für Server-zu-Server)

API-Key und Secret werden bei der Registrierung ausgestellt. Der Secret wird nur einmalig angezeigt – bitte sicher speichern!

# Bei GET-Requests reicht der API-Key
X-API-Key: abc123...

# Bei POST/PUT/DELETE zusätzlich Secret
X-API-Key: abc123...
X-API-Secret: def456...
Sicherheitshinweis: API-Key und Secret niemals clientseitig (JavaScript, Mobile App) exponieren. Nur serverseitig verwenden. Bei Verdacht auf Kompromittierung sofort im Werbeportal neuen Key generieren.

Rate Limits

API-Requests100 Requests / Minute Events erstellenAbhängig vom Tarif (Standard: 10/Monat) Event-UpdatesUnbegrenzt für eigene Events

Bei Überschreitung des Limits wird HTTP 429 Too Many Requests zurückgegeben.

Fehlerbehandlung

Alle Fehlerantworten haben folgendes Format:

{
  "error": "Beschreibung des Fehlers",
  "hint":  "Optionaler Hilfetext"    // optional
}

HTTP Status-Codes

200OK – Erfolgreiche Anfrage 201Created – Ressource erfolgreich erstellt 400Bad Request – Ungültige Anfrage 401Unauthorized – Authentifizierung fehlt oder ungültig 403Forbidden – Account nicht aktiv oder keine Berechtigung 404Not Found – Ressource nicht gefunden 409Conflict – Ressource existiert bereits (z.B. external_id) 422Unprocessable Entity – Validierungsfehler 429Too Many Requests – Rate Limit erreicht

Account Registrierung

POST /api/advertiser/register

Neuen Werbekunden-Account anlegen. Nach der Registrierung wird der Account durch einen Admin freigeschaltet (i.d.R. innerhalb von 24h).

Request Body

FeldTypPflichtBeschreibung
namestringPflichtDein Name / Ansprechpartner
companystringPflichtFirmenname
emailstringPflichtE-Mail für Login
passwordstringPflichtMindestens 8 Zeichen
phonestringOptionalTelefonnummer
websitestringOptionalWebsite-URL
descriptionstringOptionalKurzbeschreibung eures Angebots

Response

{
  "message":    "Registrierung erfolgreich – warten auf Admin-Freigabe",
  "api_key":    "a1b2c3d4e5f6...",   // 48 Zeichen, für X-API-Key Header
  "api_secret": "x9y8z7w6...",      // 64 Zeichen, NUR JETZT sichtbar!
  "note":       "Bitte API-Key und Secret sicher speichern"
}
Das API-Secret wird nur einmalig bei der Registrierung angezeigt. Danach kann nur noch der API-Key abgerufen werden. Secret sicher in deinem System speichern!

Login

POST /api/advertiser/login

Login für Werbekunden-Portal und Token-Generierung.

Request Body

{
  "email":    "info@meinclub.de",
  "password": "MeinPasswort123"
}

Response

{
  "token":      "eyJ1aWQiOjEsImlhdCI6...",  // 24h gültig
  "api_key":    "a1b2c3...",
  "expires_in": 86400,
  "advertiser": {
    "id":      1,
    "name":    "Max Mustermann",
    "company": "Beach Club Palma",
    "status":  "active"
  }
}

Account-Info

GET /api/advertiser/me

Informationen zum eigenen Account abrufen.

// Response
{
  "advertiser": {
    "id":                  1,
    "name":               "Max Mustermann",
    "company":            "Beach Club Palma",
    "email":              "info@beachclub.de",
    "status":             "active",
    "api_key":            "a1b2c3...",
    "events_per_month":   10,
    "events_this_month":  3
  }
}

Statistiken

GET /api/advertiser/stats
{
  "total_events":          15,
  "active_events":         3,
  "total_attendees":       247,
  "events_this_month":     3,
  "events_per_month":      10,
  "remaining_this_month":  7,
  "account_status":        "active"
}

Event erstellen

POST /api/advertiser/events

Neues Event erstellen. Erscheint sofort auf der SaufApp-Karte für alle Nutzer.

Request Body

FeldTypPflichtBeschreibung
titlestringPflichtEvent-Titel (max. 200 Zeichen)
starts_atISO8601PflichtStartzeit, z.B. 2026-06-01T20:00:00
latfloatPflichtBreitengrad, z.B. 39.5296
lngfloatPflichtLängengrad, z.B. 2.6920
descriptionstringOptionalAusführliche Beschreibung
addressstringOptionalAdresse / Veranstaltungsort
ends_atISO8601OptionalEndzeit
typestringOptionalSiehe Event-Typen
entry_pricefloatOptionalEintrittspreis in EUR, z.B. 10.00
dress_codestringOptionalz.B. "Beach Casual"
max_guestsintOptionalMaximale Gästezahl (0 = unbegrenzt)
ticket_urlstringOptionalLink zu Ticket-Plattform
external_idstringOptionalEure interne Event-ID (für Duplikat-Prüfung)
external_urlstringOptionalLink zur Event-Seite auf eurer Website
sponsor_labelstringOptionalBranding-Text, z.B. "Powered by Beach Club Palma"
is_publicboolOptionalStandard: true

Response (201 Created)

{
  "event_id":  42,
  "message":   "Event erfolgreich erstellt",
  "event_url": "/api/events/42",
  "remaining": 7  // verbleibende Events diesen Monat
}

Events auflisten

GET /api/advertiser/events
{
  "events": [
    {
      "id":             42,
      "title":          "Opening Night",
      "type":           "beach_party",
      "starts_at":      "2026-06-01 20:00:00",
      "address":        "Ballermann 6",
      "status":         "active",
      "attendee_count": 83,
      "external_id":    "EVT-12345",
      "ticket_url":     "https://tickets.example.com/..."
    }
  ],
  "total":              1,
  "events_this_month":  3,
  "events_per_month":   10
}

Event aktualisieren

PUT /api/advertiser/events/{event_id}

Bestehende Event-Daten aktualisieren. Nur eigene Events können geändert werden.

Alle Felder außer title, starts_at, lat, lng können aktualisiert werden. Nur geänderte Felder müssen übermittelt werden.

// Beispiel: Nur Uhrzeit und Preis ändern
{
  "starts_at":   "2026-06-01T21:00:00",
  "entry_price": 15.00
}

Event deaktivieren

DELETE /api/advertiser/events/{event_id}

Event deaktivieren (Status: cancelled). Das Event bleibt in der Datenbank, erscheint aber nicht mehr in der App. Nur eigene Events.

Event-Typen

WertBeschreibung
beach_party🏖️ Strandparty
bar🍺 Bar / Pub
club🎵 Club / Discothek
boat_party⛵ Bootsparty
house_party🏠 Private Party
other📍 Sonstiges

Code-Beispiele

JavaScript / Node.js

const API_BASE = 'https://saufapp.eu/api/advertiser';
const API_KEY    = 'dein-api-key';
const API_SECRET = 'dein-api-secret';

async function createEvent(event) {
  const res = await fetch(`${API_BASE}/events`, {
    method: 'POST',
    headers: {
      'Content-Type':  'application/json',
      'X-API-Key':     API_KEY,
      'X-API-Secret':  API_SECRET,
    },
    body: JSON.stringify(event),
  });
  const data = await res.json();
  if (!res.ok) throw new Error(data.error);
  return data;
}

// Beispiel-Aufruf
createEvent({
  title:       'Opening Night Beach Club',
  starts_at:   '2026-06-15T20:00:00',
  lat:         39.5296,
  lng:         2.6920,
  address:     'Ballermann 6, Playa de Palma',
  type:        'beach_party',
  entry_price: 10.00,
  ticket_url:  'https://tickets.beachclub.de/opening',
  external_id: 'EVT-2026-001',
});

PHP / cURL

// Event erstellen
function createSaufAppEvent(array $event): array {
  $ch = curl_init('https://saufapp.eu/api/advertiser/events');
  curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($event),
    CURLOPT_HTTPHEADER     => [
      'Content-Type: application/json',
      'X-API-Key: ' . API_KEY,
      'X-API-Secret: ' . API_SECRET,
    ],
    CURLOPT_RETURNTRANSFER => true,
  ]);
  $result = json_decode(curl_exec($ch), true);
  curl_close($ch);
  return $result;
}

Python

import requests

headers = {
  'Content-Type':  'application/json',
  'X-API-Key':     'dein-api-key',
  'X-API-Secret':  'dein-api-secret',
}

res = requests.post(
  'https://saufapp.eu/api/advertiser/events',
  headers=headers,
  json={
    'title':     'Opening Night',
    'starts_at': '2026-06-15T20:00:00',
    'lat':       39.5296,
    'lng':       2.6920,
  }
)
print(res.json())

Werbeportal

Neben der API bieten wir ein webbasiertes Werbeportal an: saufapp.eu/advertiser-portal

Im Portal können Werbekunden:

Fragen? Kontakt: partner@saufapp.eu · Antwortzeit: 24h an Werktagen

SaufApp.eu Werbekunden API · Version 1.0 · © 2026 SaufApp