Zum Inhalt springen
Passavo
Menü

API-Referenz

Jeder Endpunkt mit seinen Rechten, seinen Parametern und seinen Antworten. Diese Seite wird aus der openapi-Beschreibung selbst erzeugt: was hier steht, steht auch im Code.

48 Endpunkte, Version 2026-09-20.

Basisadresse

https://passavo.eu/api/v1

In Postman oder Insomnia importieren

Wählen Sie in Postman „Import“ und fügen Sie den Link oben ein, oder ziehen Sie die heruntergeladene Datei hinein; Insomnia macht dasselbe unter „Import from URL“. Sie bekommen sofort jeden Endpunkt als ausführbaren Aufruf — setzen Sie danach Ihren eigenen Schlüssel als Bearer-Token dazu.

https://passavo.eu/api/v1/openapi.json

Konto

Wer bin ich und was darf ich.

GET /api/v1/me #

Die Organisation, der Tarif und die Rechte dieses Schlüssels.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/me" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/me');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/me', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/me", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Organisation, der Tarif und die Rechte dieses Schlüssels.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "organisation": {},
        "plan": {},
        "api_key": {
            "name": "string",
            "prefix": "string",
            "mode": "live",
            "scopes": [
                "read"
            ],
            "expires_at": "2026-09-21T14:00:00+02:00",
            "last_used_at": "2026-09-21T14:00:00+02:00"
        },
        "locale": "string",
        "version": "string"
    }
}

Katalog

Standorte, Produkte und Preise.

GET /api/v1/events #

Die Veranstaltungen und Reihen, nach Datum.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: event_date, -event_date, created_at, -created_at, sort_order, -sort_order, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • filter[type] string · in der URL · optional

    Nach type filtern.

  • filter[from] string · in der URL · optional

    Nach from filtern.

  • filter[to] string · in der URL · optional

    Nach to filtern.

  • include string · in der URL · optional

    Diese Beziehungen mitliefern: venue.

    Werte: venue

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/events" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/events');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/events', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/events", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Veranstaltungen und Reihen, nach Datum.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": 1,
            "type": "string",
            "name": "string",
            "description": "string",
            "translations": {},
            "sku": "string",
            "venue_id": 1,
            "vat_rate_bp": 1,
            "capacity_rules": {},
            "event_date": "2026-09-21",
            "requires_slot": true,
            "supports_slot": true,
            "is_active": true,
            "sort_order": 1,
            "prices": [
                {
                    "id": 1,
                    "rate_id": 1,
                    "channel": "string",
                    "label": "string",
                    "amount": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "valid_from": "2026-09-21",
                    "valid_until": "2026-09-21"
                }
            ],
            "rates": [
                {
                    "id": 1,
                    "name": "string",
                    "translations": {},
                    "sort_order": 1,
                    "is_active": true,
                    "min_per_order": 1,
                    "max_per_order": 1,
                    "seats": 1,
                    "unit_type": "string",
                    "online_price": {
                        "amount_cent": null,
                        "currency": null
                    },
                    "prices": [
                        {
                            "id": null,
                            "rate_id": null,
                            "channel": null,
                            "label": null,
                            "amount": null,
                            "valid_from": null,
                            "valid_until": null
                        }
                    ]
                }
            ],
            "venue": {
                "id": 1,
                "name": "string",
                "slug": "string",
                "address": {},
                "latitude": 1,
                "longitude": 1,
                "timezone": "string",
                "opening_hours": {},
                "is_active": true,
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            },
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

GET /api/v1/products #

Die Produkte mit ihren Preisen.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, sort_order, -sort_order, event_date, -event_date, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • filter[type] string · in der URL · optional

    Nach type filtern.

  • filter[venue_id] string · in der URL · optional

    Nach venue_id filtern.

  • include string · in der URL · optional

    Diese Beziehungen mitliefern: venue.

    Werte: venue

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/products" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/products');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/products', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/products", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Produkte mit ihren Preisen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": 1,
            "type": "string",
            "name": "string",
            "description": "string",
            "translations": {},
            "sku": "string",
            "venue_id": 1,
            "vat_rate_bp": 1,
            "capacity_rules": {},
            "event_date": "2026-09-21",
            "requires_slot": true,
            "supports_slot": true,
            "is_active": true,
            "sort_order": 1,
            "prices": [
                {
                    "id": 1,
                    "rate_id": 1,
                    "channel": "string",
                    "label": "string",
                    "amount": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "valid_from": "2026-09-21",
                    "valid_until": "2026-09-21"
                }
            ],
            "rates": [
                {
                    "id": 1,
                    "name": "string",
                    "translations": {},
                    "sort_order": 1,
                    "is_active": true,
                    "min_per_order": 1,
                    "max_per_order": 1,
                    "seats": 1,
                    "unit_type": "string",
                    "online_price": {
                        "amount_cent": null,
                        "currency": null
                    },
                    "prices": [
                        {
                            "id": null,
                            "rate_id": null,
                            "channel": null,
                            "label": null,
                            "amount": null,
                            "valid_from": null,
                            "valid_until": null
                        }
                    ]
                }
            ],
            "venue": {
                "id": 1,
                "name": "string",
                "slug": "string",
                "address": {},
                "latitude": 1,
                "longitude": 1,
                "timezone": "string",
                "opening_hours": {},
                "is_active": true,
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            },
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

GET /api/v1/products/{id} #

Ein einzelnes Produkt.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die ID des Produkts.

  • include string · in der URL · optional

    Diese Beziehungen mitliefern: venue.

    Werte: venue

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/products/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/products/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/products/12', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/products/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Ein einzelnes Produkt.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "type": "string",
        "name": "string",
        "description": "string",
        "translations": {},
        "sku": "string",
        "venue_id": 1,
        "vat_rate_bp": 1,
        "capacity_rules": {},
        "event_date": "2026-09-21",
        "requires_slot": true,
        "supports_slot": true,
        "is_active": true,
        "sort_order": 1,
        "prices": [
            {
                "id": 1,
                "rate_id": 1,
                "channel": "string",
                "label": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "valid_from": "2026-09-21",
                "valid_until": "2026-09-21"
            }
        ],
        "rates": [
            {
                "id": 1,
                "name": "string",
                "translations": {},
                "sort_order": 1,
                "is_active": true,
                "min_per_order": 1,
                "max_per_order": 1,
                "seats": 1,
                "unit_type": "string",
                "online_price": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "prices": [
                    {
                        "id": 1,
                        "rate_id": 1,
                        "channel": "string",
                        "label": "string",
                        "amount": {
                            "amount_cent": null,
                            "currency": null
                        },
                        "valid_from": "2026-09-21",
                        "valid_until": "2026-09-21"
                    }
                ]
            }
        ],
        "venue": {
            "id": 1,
            "name": "string",
            "slug": "string",
            "address": {},
            "latitude": 1,
            "longitude": 1,
            "timezone": "string",
            "opening_hours": {},
            "is_active": true,
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        },
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/venues #

Die Standorte der Organisation.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, name, -name, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • include string · in der URL · optional

    Diese Beziehungen mitliefern: products.

    Werte: products

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/venues" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/venues');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/venues', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/venues", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Standorte der Organisation.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": 1,
            "name": "string",
            "slug": "string",
            "address": {},
            "latitude": 1,
            "longitude": 1,
            "timezone": "string",
            "opening_hours": {},
            "is_active": true,
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

GET /api/v1/venues/{id} #

Ein einzelner Standort.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die ID des Standorts.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/venues/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/venues/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/venues/12', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/venues/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Ein einzelner Standort.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "name": "string",
        "slug": "string",
        "address": {},
        "latitude": 1,
        "longitude": 1,
        "timezone": "string",
        "opening_hours": {},
        "is_active": true,
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

Verfügbarkeit

Zeitfenster und freie Plätze.

GET /api/v1/products/{id}/seats #

Die Plätze einer Vorstellung mit Saalplan, mit den freien Plätzen.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die ID des Produkts.

  • slot_id integer · in der URL · optional

    Das Zeitfenster (die Vorstellung). Pflicht bei einem Produkt mit Zeitfenstern.

  • date string · in der URL · optional

    Der Tag, bei einem Event ohne Zeitfenster. Standard ist das Eventdatum.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/products/12/seats" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/products/12/seats');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/products/12/seats', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/products/12/seats", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Plätze einer Vorstellung mit Saalplan, mit den freien Plätzen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "product_id": 1,
        "slot_id": 1,
        "date": "2026-09-21",
        "categories": [
            {
                "id": 1,
                "name": "string",
                "color": "string"
            }
        ],
        "seats": [
            {
                "id": 1,
                "label": "string",
                "section": "string",
                "row": "string",
                "number": "string",
                "category_id": 1,
                "kind": "standard",
                "x": 1,
                "y": 1,
                "available": true
            }
        ]
    }
}

GET /api/v1/products/{id}/slots #

Die Zeitfenster eines Produkts, mit den freien Plätzen.

Benötigtes Recht: read

Parameter

  • id integer · im Pfad · erforderlich

    Die ID des Produkts.

  • from string · in der URL · optional

    Beginn des Zeitraums; standardmäßig heute.

  • to string · in der URL · optional

    Ende des Zeitraums; standardmäßig 31 Tage später.

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: starts_at, -starts_at, created_at, -created_at, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/products/12/slots" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/products/12/slots');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/products/12/slots', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/products/12/slots", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Zeitfenster eines Produkts, mit den freien Plätzen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": 1,
            "product_id": 1,
            "venue_id": 1,
            "starts_at": "2026-09-21T14:00:00+02:00",
            "ends_at": "2026-09-21T14:00:00+02:00",
            "status": "string",
            "availability": {
                "capacity": 1,
                "sold": 1,
                "free": 1,
                "bookable_online": true,
                "started": true
            },
            "note": "string"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

Verkauf

Rabatte, Gutscheine und Jahreskarten.

GET /api/v1/discounts #

Die Rabattcodes.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, code, -code, valid_until, -valid_until, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • filter[type] string · in der URL · optional

    Nach type filtern.

  • filter[code] string · in der URL · optional

    Nach code filtern.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/discounts" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/discounts');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/discounts', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/discounts", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Rabattcodes.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": 1,
            "code": "string",
            "type": "percent",
            "value": 1,
            "amount": {},
            "percentage_bp": 1,
            "valid_from": "2026-09-21T14:00:00+02:00",
            "valid_until": "2026-09-21T14:00:00+02:00",
            "max_redemptions": 1,
            "max_redemptions_per_customer": 1,
            "redeemed_count": 1,
            "minimum_order": {},
            "product_ids": [
                1
            ],
            "is_active": true,
            "is_redeemable": true,
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

GET /api/v1/passes #

Die Jahreskarten.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, valid_until, -valid_until, valid_from, -valid_from, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • filter[product_id] string · in der URL · optional

    Nach product_id filtern.

  • include string · in der URL · optional

    Diese Beziehungen mitliefern: product.

    Werte: product

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/passes" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/passes');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/passes', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/passes", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Jahreskarten.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
            "product_id": 1,
            "holder_name": "string",
            "holder_email": "string",
            "valid_from": "2026-09-21",
            "valid_until": "2026-09-21",
            "status": "string",
            "is_usable": true,
            "visit_count": 1,
            "last_visit_at": "2026-09-21T14:00:00+02:00",
            "cancelled_at": "2026-09-21T14:00:00+02:00",
            "product": {
                "id": 1,
                "type": "string",
                "name": "string",
                "description": "string",
                "translations": {},
                "sku": "string",
                "venue_id": 1,
                "vat_rate_bp": 1,
                "capacity_rules": {},
                "event_date": "2026-09-21",
                "requires_slot": true,
                "supports_slot": true,
                "is_active": true,
                "sort_order": 1,
                "prices": [
                    {
                        "id": 1,
                        "rate_id": 1,
                        "channel": "string",
                        "label": "string",
                        "amount": {
                            "amount_cent": null,
                            "currency": null
                        },
                        "valid_from": "2026-09-21",
                        "valid_until": "2026-09-21"
                    }
                ],
                "rates": [
                    {
                        "id": 1,
                        "name": "string",
                        "translations": {},
                        "sort_order": 1,
                        "is_active": true,
                        "min_per_order": 1,
                        "max_per_order": 1,
                        "seats": 1,
                        "unit_type": "string",
                        "online_price": null,
                        "prices": [
                            null
                        ]
                    }
                ],
                "venue": {
                    "id": 1,
                    "name": "string",
                    "slug": "string",
                    "address": {},
                    "latitude": 1,
                    "longitude": 1,
                    "timezone": "string",
                    "opening_hours": {},
                    "is_active": true,
                    "created_at": "2026-09-21T14:00:00+02:00",
                    "updated_at": "2026-09-21T14:00:00+02:00"
                },
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            },
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

POST /api/v1/passes #

Eine Jahreskarte auf den Namen ausgeben.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/passes" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/passes', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/passes', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/passes", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Eine Jahreskarte auf den Namen ausgeben.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "product_id": 1,
        "holder_name": "string",
        "holder_email": "string",
        "valid_from": "2026-09-21",
        "valid_until": "2026-09-21",
        "status": "string",
        "is_usable": true,
        "visit_count": 1,
        "last_visit_at": "2026-09-21T14:00:00+02:00",
        "cancelled_at": "2026-09-21T14:00:00+02:00",
        "product": {
            "id": 1,
            "type": "string",
            "name": "string",
            "description": "string",
            "translations": {},
            "sku": "string",
            "venue_id": 1,
            "vat_rate_bp": 1,
            "capacity_rules": {},
            "event_date": "2026-09-21",
            "requires_slot": true,
            "supports_slot": true,
            "is_active": true,
            "sort_order": 1,
            "prices": [
                {
                    "id": 1,
                    "rate_id": 1,
                    "channel": "string",
                    "label": "string",
                    "amount": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "valid_from": "2026-09-21",
                    "valid_until": "2026-09-21"
                }
            ],
            "rates": [
                {
                    "id": 1,
                    "name": "string",
                    "translations": {},
                    "sort_order": 1,
                    "is_active": true,
                    "min_per_order": 1,
                    "max_per_order": 1,
                    "seats": 1,
                    "unit_type": "string",
                    "online_price": {
                        "amount_cent": null,
                        "currency": null
                    },
                    "prices": [
                        {
                            "id": null,
                            "rate_id": null,
                            "channel": null,
                            "label": null,
                            "amount": null,
                            "valid_from": null,
                            "valid_until": null
                        }
                    ]
                }
            ],
            "venue": {
                "id": 1,
                "name": "string",
                "slug": "string",
                "address": {},
                "latitude": 1,
                "longitude": 1,
                "timezone": "string",
                "opening_hours": {},
                "is_active": true,
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            },
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        },
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/passes/{id}/renew #

Eine Jahreskarte verlängern; dabei entsteht eine neue Karte.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • id string · im Pfad · erforderlich

    Die UUID der Jahreskarte.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/passes/12/renew" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/passes/12/renew', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/passes/12/renew', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/passes/12/renew", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Eine Jahreskarte verlängern; dabei entsteht eine neue Karte.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "product_id": 1,
        "holder_name": "string",
        "holder_email": "string",
        "valid_from": "2026-09-21",
        "valid_until": "2026-09-21",
        "status": "string",
        "is_usable": true,
        "visit_count": 1,
        "last_visit_at": "2026-09-21T14:00:00+02:00",
        "cancelled_at": "2026-09-21T14:00:00+02:00",
        "product": {
            "id": 1,
            "type": "string",
            "name": "string",
            "description": "string",
            "translations": {},
            "sku": "string",
            "venue_id": 1,
            "vat_rate_bp": 1,
            "capacity_rules": {},
            "event_date": "2026-09-21",
            "requires_slot": true,
            "supports_slot": true,
            "is_active": true,
            "sort_order": 1,
            "prices": [
                {
                    "id": 1,
                    "rate_id": 1,
                    "channel": "string",
                    "label": "string",
                    "amount": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "valid_from": "2026-09-21",
                    "valid_until": "2026-09-21"
                }
            ],
            "rates": [
                {
                    "id": 1,
                    "name": "string",
                    "translations": {},
                    "sort_order": 1,
                    "is_active": true,
                    "min_per_order": 1,
                    "max_per_order": 1,
                    "seats": 1,
                    "unit_type": "string",
                    "online_price": {
                        "amount_cent": null,
                        "currency": null
                    },
                    "prices": [
                        {
                            "id": null,
                            "rate_id": null,
                            "channel": null,
                            "label": null,
                            "amount": null,
                            "valid_from": null,
                            "valid_until": null
                        }
                    ]
                }
            ],
            "venue": {
                "id": 1,
                "name": "string",
                "slug": "string",
                "address": {},
                "latitude": 1,
                "longitude": 1,
                "timezone": "string",
                "opening_hours": {},
                "is_active": true,
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            },
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        },
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/vouchers #

Einen Gutschein ausgeben.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/vouchers" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/vouchers', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/vouchers', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/vouchers", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Einen Gutschein ausgeben.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "code": "string",
        "balance": {
            "amount_cent": 1,
            "currency": "EUR"
        },
        "initial_balance": {
            "amount_cent": 1,
            "currency": "EUR"
        },
        "currency": "string",
        "status": "string",
        "is_redeemable": true,
        "expires_at": "2026-09-21",
        "recipient_name": "string",
        "is_active": true,
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/vouchers/{code} #

Das Guthaben eines Gutscheins.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • code string · im Pfad · erforderlich

    Der Code des Gutscheins.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/vouchers/BON-1234" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/vouchers/BON-1234');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/vouchers/BON-1234', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/vouchers/BON-1234", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Das Guthaben eines Gutscheins.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "code": "string",
        "balance": {
            "amount_cent": 1,
            "currency": "EUR"
        },
        "initial_balance": {
            "amount_cent": 1,
            "currency": "EUR"
        },
        "currency": "string",
        "status": "string",
        "is_redeemable": true,
        "expires_at": "2026-09-21",
        "recipient_name": "string",
        "is_active": true,
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/vouchers/{code}/redeem #

Einen Teil eines Gutscheins einlösen.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • code string · im Pfad · erforderlich

    Der Code des Gutscheins.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/vouchers/BON-1234/redeem" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/vouchers/BON-1234/redeem', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/vouchers/BON-1234/redeem', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/vouchers/BON-1234/redeem", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Einen Teil eines Gutscheins einlösen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "code": "string",
        "requested": {
            "amount_cent": 1,
            "currency": "EUR"
        },
        "redeemed": {
            "amount_cent": 1,
            "currency": "EUR"
        },
        "balance": {
            "amount_cent": 1,
            "currency": "EUR"
        },
        "is_redeemable": true
    }
}

Bestellungen

Bestellungen anlegen, bezahlen, stornieren und erstatten.

GET /api/v1/orders #

Die Bestellungen der Organisation.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, paid_at, -paid_at, total_cent, -total_cent, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • filter[channel] string · in der URL · optional

    Nach channel filtern.

  • filter[reference] string · in der URL · optional

    Nach reference filtern.

  • filter[email] string · in der URL · optional

    Nach email filtern.

  • filter[from] string · in der URL · optional

    Nach from filtern.

  • filter[to] string · in der URL · optional

    Nach to filtern.

  • filter[sandbox] string · in der URL · optional

    Nach sandbox filtern.

  • include string · in der URL · optional

    Diese Beziehungen mitliefern: lines, tickets, payments, refunds.

    Werte: lines, tickets, payments, refunds

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/orders" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/orders');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/orders', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/orders", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Bestellungen der Organisation.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": "string",
            "reference": "string",
            "status": "draft",
            "channel": "online",
            "venue_id": 1,
            "buyer": {
                "name": "string",
                "email": "string",
                "phone": "string",
                "note": "string",
                "locale": "string"
            },
            "totals": {
                "subtotal": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "discount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "discount_code": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "voucher": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "vat": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "total": {
                    "amount_cent": 1,
                    "currency": "EUR"
                }
            },
            "discount_code": "string",
            "voucher_code": "string",
            "reserved_until": "2026-09-21T14:00:00+02:00",
            "sandbox": true,
            "test": true,
            "payment": {
                "provider": "string",
                "provider_ref": "string",
                "redirect_url": "string",
                "qr_code_url": "string"
            },
            "paid_at": "2026-09-21T14:00:00+02:00",
            "cancelled_at": "2026-09-21T14:00:00+02:00",
            "lines": [
                {
                    "id": 1,
                    "product_id": 1,
                    "slot_id": 1,
                    "description": "string",
                    "rate_id": 1,
                    "rate_name": "string",
                    "quantity": 1,
                    "seats": [
                        "string"
                    ],
                    "unit_price": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "line_total": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "vat_rate_bp": 1,
                    "vat": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "valid_on": "2026-09-21",
                    "created_at": "2026-09-21T14:00:00+02:00"
                }
            ],
            "tickets": [
                {
                    "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
                    "order_line_id": 1,
                    "order_id": "string",
                    "product_id": 1,
                    "slot_id": 1,
                    "description": "string",
                    "rate_id": 1,
                    "rate_name": "string",
                    "holder_name": "string",
                    "seat": {
                        "id": 1,
                        "label": "string",
                        "section": "string",
                        "row": "string",
                        "number": "string"
                    },
                    "status": "valid",
                    "valid_on": "2026-09-21",
                    "is_scannable": true,
                    "used_at": "2026-09-21T14:00:00+02:00",
                    "created_at": "2026-09-21T14:00:00+02:00",
                    "updated_at": "2026-09-21T14:00:00+02:00"
                }
            ],
            "payments": [
                {
                    "id": 1,
                    "provider": "string",
                    "provider_ref": "string",
                    "method": "string",
                    "amount": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "status": "string",
                    "paid_at": "2026-09-21T14:00:00+02:00",
                    "created_at": "2026-09-21T14:00:00+02:00"
                }
            ],
            "refunds": [
                {
                    "id": 1,
                    "payment_id": 1,
                    "provider": "string",
                    "provider_ref": "string",
                    "amount": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "status": "pending",
                    "reason": "string",
                    "refunded_at": "2026-09-21T14:00:00+02:00",
                    "created_at": "2026-09-21T14:00:00+02:00"
                }
            ],
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

POST /api/v1/orders #

Eine neue Bestellung, mit reservierten Plätzen.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · erforderlich

    Pflicht. Ohne diesen Schlüssel kann eine Wiederholung nach einem Netzwerkfehler eine zweite Bestellung oder einen zweiten Gutschein erzeugen.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/orders" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/orders', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/orders', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/orders", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Eine neue Bestellung, mit reservierten Plätzen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Das Zeitfenster ist voll oder hat schon begonnen.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "string",
        "reference": "string",
        "status": "draft",
        "channel": "online",
        "venue_id": 1,
        "buyer": {
            "name": "string",
            "email": "string",
            "phone": "string",
            "note": "string",
            "locale": "string"
        },
        "totals": {
            "subtotal": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount_code": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "voucher": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "vat": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "total": {
                "amount_cent": 1,
                "currency": "EUR"
            }
        },
        "discount_code": "string",
        "voucher_code": "string",
        "reserved_until": "2026-09-21T14:00:00+02:00",
        "sandbox": true,
        "test": true,
        "payment": {
            "provider": "string",
            "provider_ref": "string",
            "redirect_url": "string",
            "qr_code_url": "string"
        },
        "paid_at": "2026-09-21T14:00:00+02:00",
        "cancelled_at": "2026-09-21T14:00:00+02:00",
        "lines": [
            {
                "id": 1,
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "quantity": 1,
                "seats": [
                    "string"
                ],
                "unit_price": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "line_total": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "vat_rate_bp": 1,
                "vat": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "valid_on": "2026-09-21",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "tickets": [
            {
                "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
                "order_line_id": 1,
                "order_id": "string",
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "holder_name": "string",
                "seat": {
                    "id": 1,
                    "label": "string",
                    "section": "string",
                    "row": "string",
                    "number": "string"
                },
                "status": "valid",
                "valid_on": "2026-09-21",
                "is_scannable": true,
                "used_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "payments": [
            {
                "id": 1,
                "provider": "string",
                "provider_ref": "string",
                "method": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "string",
                "paid_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "refunds": [
            {
                "id": 1,
                "payment_id": 1,
                "provider": "string",
                "provider_ref": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "pending",
                "reason": "string",
                "refunded_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/orders/{id} #

Eine einzelne Bestellung.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id string · im Pfad · erforderlich

    Die Referenz der Bestellung, z. B. ORD-AB12CD34EF.

  • include string · in der URL · optional

    Diese Beziehungen mitliefern: lines, tickets, payments, refunds.

    Werte: lines, tickets, payments, refunds

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/orders/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/orders/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/orders/12', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/orders/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Eine einzelne Bestellung.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "string",
        "reference": "string",
        "status": "draft",
        "channel": "online",
        "venue_id": 1,
        "buyer": {
            "name": "string",
            "email": "string",
            "phone": "string",
            "note": "string",
            "locale": "string"
        },
        "totals": {
            "subtotal": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount_code": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "voucher": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "vat": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "total": {
                "amount_cent": 1,
                "currency": "EUR"
            }
        },
        "discount_code": "string",
        "voucher_code": "string",
        "reserved_until": "2026-09-21T14:00:00+02:00",
        "sandbox": true,
        "test": true,
        "payment": {
            "provider": "string",
            "provider_ref": "string",
            "redirect_url": "string",
            "qr_code_url": "string"
        },
        "paid_at": "2026-09-21T14:00:00+02:00",
        "cancelled_at": "2026-09-21T14:00:00+02:00",
        "lines": [
            {
                "id": 1,
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "quantity": 1,
                "seats": [
                    "string"
                ],
                "unit_price": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "line_total": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "vat_rate_bp": 1,
                "vat": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "valid_on": "2026-09-21",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "tickets": [
            {
                "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
                "order_line_id": 1,
                "order_id": "string",
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "holder_name": "string",
                "seat": {
                    "id": 1,
                    "label": "string",
                    "section": "string",
                    "row": "string",
                    "number": "string"
                },
                "status": "valid",
                "valid_on": "2026-09-21",
                "is_scannable": true,
                "used_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "payments": [
            {
                "id": 1,
                "provider": "string",
                "provider_ref": "string",
                "method": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "string",
                "paid_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "refunds": [
            {
                "id": 1,
                "payment_id": 1,
                "provider": "string",
                "provider_ref": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "pending",
                "reason": "string",
                "refunded_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/orders/{id}/cancel #

Stornieren und die Plätze freigeben.

Benötigtes Recht: write

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • id string · im Pfad · erforderlich

    Die Referenz der Bestellung, z. B. ORD-AB12CD34EF.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/orders/12/cancel" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->post('https://passavo.eu/api/v1/orders/12/cancel');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/orders/12/cancel', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.post("https://passavo.eu/api/v1/orders/12/cancel", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Stornieren und die Plätze freigeben.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Diese Bestellung kann nicht storniert werden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "string",
        "reference": "string",
        "status": "draft",
        "channel": "online",
        "venue_id": 1,
        "buyer": {
            "name": "string",
            "email": "string",
            "phone": "string",
            "note": "string",
            "locale": "string"
        },
        "totals": {
            "subtotal": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount_code": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "voucher": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "vat": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "total": {
                "amount_cent": 1,
                "currency": "EUR"
            }
        },
        "discount_code": "string",
        "voucher_code": "string",
        "reserved_until": "2026-09-21T14:00:00+02:00",
        "sandbox": true,
        "test": true,
        "payment": {
            "provider": "string",
            "provider_ref": "string",
            "redirect_url": "string",
            "qr_code_url": "string"
        },
        "paid_at": "2026-09-21T14:00:00+02:00",
        "cancelled_at": "2026-09-21T14:00:00+02:00",
        "lines": [
            {
                "id": 1,
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "quantity": 1,
                "seats": [
                    "string"
                ],
                "unit_price": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "line_total": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "vat_rate_bp": 1,
                "vat": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "valid_on": "2026-09-21",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "tickets": [
            {
                "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
                "order_line_id": 1,
                "order_id": "string",
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "holder_name": "string",
                "seat": {
                    "id": 1,
                    "label": "string",
                    "section": "string",
                    "row": "string",
                    "number": "string"
                },
                "status": "valid",
                "valid_on": "2026-09-21",
                "is_scannable": true,
                "used_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "payments": [
            {
                "id": 1,
                "provider": "string",
                "provider_ref": "string",
                "method": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "string",
                "paid_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "refunds": [
            {
                "id": 1,
                "payment_id": 1,
                "provider": "string",
                "provider_ref": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "pending",
                "reason": "string",
                "refunded_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/orders/{id}/checkout #

Der Zahllink des verknüpften Anbieters.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • id string · im Pfad · erforderlich

    Die Referenz der Bestellung, z. B. ORD-AB12CD34EF.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/orders/12/checkout" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/orders/12/checkout', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/orders/12/checkout', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/orders/12/checkout", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 200 — Der Zahllink des verknüpften Anbieters.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Diese Organisation hat keinen Zahlungsanbieter verknüpft.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "string",
        "reference": "string",
        "status": "draft",
        "channel": "online",
        "venue_id": 1,
        "buyer": {
            "name": "string",
            "email": "string",
            "phone": "string",
            "note": "string",
            "locale": "string"
        },
        "totals": {
            "subtotal": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount_code": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "voucher": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "vat": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "total": {
                "amount_cent": 1,
                "currency": "EUR"
            }
        },
        "discount_code": "string",
        "voucher_code": "string",
        "reserved_until": "2026-09-21T14:00:00+02:00",
        "sandbox": true,
        "test": true,
        "payment": {
            "provider": "string",
            "provider_ref": "string",
            "redirect_url": "string",
            "qr_code_url": "string"
        },
        "paid_at": "2026-09-21T14:00:00+02:00",
        "cancelled_at": "2026-09-21T14:00:00+02:00",
        "lines": [
            {
                "id": 1,
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "quantity": 1,
                "seats": [
                    "string"
                ],
                "unit_price": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "line_total": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "vat_rate_bp": 1,
                "vat": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "valid_on": "2026-09-21",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "tickets": [
            {
                "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
                "order_line_id": 1,
                "order_id": "string",
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "holder_name": "string",
                "seat": {
                    "id": 1,
                    "label": "string",
                    "section": "string",
                    "row": "string",
                    "number": "string"
                },
                "status": "valid",
                "valid_on": "2026-09-21",
                "is_scannable": true,
                "used_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "payments": [
            {
                "id": 1,
                "provider": "string",
                "provider_ref": "string",
                "method": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "string",
                "paid_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "refunds": [
            {
                "id": 1,
                "payment_id": 1,
                "provider": "string",
                "provider_ref": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "pending",
                "reason": "string",
                "refunded_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/orders/{id}/invoice-request #

Eine Rechnung auf den Namen anfordern.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • id string · im Pfad · erforderlich

    Die Referenz der Bestellung, z. B. ORD-AB12CD34EF.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/orders/12/invoice-request" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/orders/12/invoice-request', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/orders/12/invoice-request', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/orders/12/invoice-request", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Eine Rechnung auf den Namen anfordern.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "order_id": "string",
        "requested_at": "2026-09-21T14:00:00+02:00",
        "company_name": "string",
        "vat_number": "string",
        "vat_number_valid": true,
        "country": "string",
        "invoice_number": "string"
    }
}

POST /api/v1/orders/{id}/mark-paid #

Außerhalb des Anbieters bezahlt (Überweisung, bar).

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • id string · im Pfad · erforderlich

    Die Referenz der Bestellung, z. B. ORD-AB12CD34EF.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/orders/12/mark-paid" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/orders/12/mark-paid', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/orders/12/mark-paid', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/orders/12/mark-paid", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 200 — Außerhalb des Anbieters bezahlt (Überweisung, bar).
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "string",
        "reference": "string",
        "status": "draft",
        "channel": "online",
        "venue_id": 1,
        "buyer": {
            "name": "string",
            "email": "string",
            "phone": "string",
            "note": "string",
            "locale": "string"
        },
        "totals": {
            "subtotal": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "discount_code": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "voucher": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "vat": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "total": {
                "amount_cent": 1,
                "currency": "EUR"
            }
        },
        "discount_code": "string",
        "voucher_code": "string",
        "reserved_until": "2026-09-21T14:00:00+02:00",
        "sandbox": true,
        "test": true,
        "payment": {
            "provider": "string",
            "provider_ref": "string",
            "redirect_url": "string",
            "qr_code_url": "string"
        },
        "paid_at": "2026-09-21T14:00:00+02:00",
        "cancelled_at": "2026-09-21T14:00:00+02:00",
        "lines": [
            {
                "id": 1,
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "quantity": 1,
                "seats": [
                    "string"
                ],
                "unit_price": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "line_total": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "vat_rate_bp": 1,
                "vat": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "valid_on": "2026-09-21",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "tickets": [
            {
                "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
                "order_line_id": 1,
                "order_id": "string",
                "product_id": 1,
                "slot_id": 1,
                "description": "string",
                "rate_id": 1,
                "rate_name": "string",
                "holder_name": "string",
                "seat": {
                    "id": 1,
                    "label": "string",
                    "section": "string",
                    "row": "string",
                    "number": "string"
                },
                "status": "valid",
                "valid_on": "2026-09-21",
                "is_scannable": true,
                "used_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00",
                "updated_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "payments": [
            {
                "id": 1,
                "provider": "string",
                "provider_ref": "string",
                "method": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "string",
                "paid_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "refunds": [
            {
                "id": 1,
                "payment_id": 1,
                "provider": "string",
                "provider_ref": "string",
                "amount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "status": "pending",
                "reason": "string",
                "refunded_at": "2026-09-21T14:00:00+02:00",
                "created_at": "2026-09-21T14:00:00+02:00"
            }
        ],
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/orders/{id}/refund #

Ganz oder teilweise erstatten.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • id string · im Pfad · erforderlich

    Die Referenz der Bestellung, z. B. ORD-AB12CD34EF.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/orders/12/refund" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/orders/12/refund', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/orders/12/refund', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/orders/12/refund", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Ganz oder teilweise erstatten.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Es gibt nichts (mehr) zu erstatten.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "payment_id": 1,
        "provider": "string",
        "provider_ref": "string",
        "amount": {
            "amount_cent": 1,
            "currency": "EUR"
        },
        "status": "pending",
        "reason": "string",
        "refunded_at": "2026-09-21T14:00:00+02:00",
        "created_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/sandbox/payments/{reference} #

Die nachgebildete Zahlungsseite der Sandbox.

Benötigtes Recht: Kein Schlüssel nötig

Parameter

  • reference string · im Pfad · erforderlich

    Die Referenz der Bestellung, z. B. ORD-AB12CD34EF.

  • signature string · in der URL · optional

    Die Signatur aus dem Link; ändern Sie sie nicht.

  • expires integer · in der URL · optional

    Wann der Link abläuft, als Zeitstempel.

  • return_url string · in der URL · optional

    Wohin der Käufer danach geht.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/sandbox/payments/12" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->get('https://passavo.eu/api/v1/sandbox/payments/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/sandbox/payments/12', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json"}
response = requests.get("https://passavo.eu/api/v1/sandbox/payments/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die nachgebildete Zahlungsseite der Sandbox.
  • 302 — Zurück zur return_url der Anbindung.
  • 403 — Dieser Link ist nicht gültig oder abgelaufen.
  • 404 — Nicht gefunden.

POST /api/v1/sandbox/payments/{reference} #

Die nachgebildete Zahlung abschließen.

Benötigtes Recht: Kein Schlüssel nötig

Parameter

  • reference string · im Pfad · erforderlich

    Die Referenz der Bestellung, z. B. ORD-AB12CD34EF.

  • signature string · in der URL · optional

    Die Signatur aus dem Link; ändern Sie sie nicht.

  • expires integer · in der URL · optional

    Wann der Link abläuft, als Zeitstempel.

  • return_url string · in der URL · optional

    Wohin der Käufer danach geht.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/sandbox/payments/12" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->post('https://passavo.eu/api/v1/sandbox/payments/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/sandbox/payments/12', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json"}
response = requests.post("https://passavo.eu/api/v1/sandbox/payments/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die nachgebildete Zahlung abschließen.
  • 302 — Zurück zur return_url der Anbindung.
  • 403 — Dieser Link ist nicht gültig oder abgelaufen.
  • 404 — Nicht gefunden.

Tickets

Tickets abrufen, entwerten und erneut versenden.

GET /api/v1/tickets #

Die Tickets, mit Filtern für die Einlassliste.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, valid_on, -valid_on, used_at, -used_at, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • filter[valid_on] string · in der URL · optional

    Nach valid_on filtern.

  • filter[product_id] string · in der URL · optional

    Nach product_id filtern.

  • filter[order] string · in der URL · optional

    Nach order filtern.

  • filter[from] string · in der URL · optional

    Nach from filtern.

  • filter[to] string · in der URL · optional

    Nach to filtern.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/tickets" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/tickets');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/tickets', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/tickets", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Tickets, mit Filtern für die Einlassliste.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
            "order_line_id": 1,
            "order_id": "string",
            "product_id": 1,
            "slot_id": 1,
            "description": "string",
            "rate_id": 1,
            "rate_name": "string",
            "holder_name": "string",
            "seat": {
                "id": 1,
                "label": "string",
                "section": "string",
                "row": "string",
                "number": "string"
            },
            "status": "valid",
            "valid_on": "2026-09-21",
            "is_scannable": true,
            "used_at": "2026-09-21T14:00:00+02:00",
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

GET /api/v1/tickets/{uuid} #

Ein einzelnes Ticket.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • uuid string · im Pfad · erforderlich

    Die UUID des Tickets.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/tickets/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/tickets/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/tickets/12', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/tickets/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Ein einzelnes Ticket.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "order_line_id": 1,
        "order_id": "string",
        "product_id": 1,
        "slot_id": 1,
        "description": "string",
        "rate_id": 1,
        "rate_name": "string",
        "holder_name": "string",
        "seat": {
            "id": 1,
            "label": "string",
            "section": "string",
            "row": "string",
            "number": "string"
        },
        "status": "valid",
        "valid_on": "2026-09-21",
        "is_scannable": true,
        "used_at": "2026-09-21T14:00:00+02:00",
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/tickets/{uuid}/pdf #

Ein signierter Link zum PDF mit den Tickets.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • uuid string · im Pfad · erforderlich

    Die UUID des Tickets.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/tickets/12/pdf" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/tickets/12/pdf');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/tickets/12/pdf', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/tickets/12/pdf", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Ein signierter Link zum PDF mit den Tickets.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "ticket_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "order_id": "string",
        "url": "https://passavo.eu",
        "expires_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/tickets/{uuid}/resend #

Die Bestätigungsmail erneut versenden.

Benötigtes Recht: write

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • uuid string · im Pfad · erforderlich

    Die UUID des Tickets.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/tickets/12/resend" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->post('https://passavo.eu/api/v1/tickets/12/resend');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/tickets/12/resend', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.post("https://passavo.eu/api/v1/tickets/12/resend", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Bestätigungsmail erneut versenden.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "ticket_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "order_id": "string",
        "sent_to": "string"
    }
}

POST /api/v1/tickets/{uuid}/void #

Das Ticket ungültig machen.

Benötigtes Recht: write

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • uuid string · im Pfad · erforderlich

    Die UUID des Tickets.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/tickets/12/void" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->post('https://passavo.eu/api/v1/tickets/12/void');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/tickets/12/void', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.post("https://passavo.eu/api/v1/tickets/12/void", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Das Ticket ungültig machen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "order_line_id": 1,
        "order_id": "string",
        "product_id": 1,
        "slot_id": 1,
        "description": "string",
        "rate_id": 1,
        "rate_name": "string",
        "holder_name": "string",
        "seat": {
            "id": 1,
            "label": "string",
            "section": "string",
            "row": "string",
            "number": "string"
        },
        "status": "valid",
        "valid_on": "2026-09-21",
        "is_scannable": true,
        "used_at": "2026-09-21T14:00:00+02:00",
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/tickets/{uuid}/wallet #

Signierte Links zu den Wallet-Pässen.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • uuid string · im Pfad · erforderlich

    Die UUID des Tickets.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/tickets/12/wallet" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/tickets/12/wallet');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/tickets/12/wallet', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/tickets/12/wallet", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Signierte Links zu den Wallet-Pässen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "ticket_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "apple_url": "https://passavo.eu",
        "google_url": "https://passavo.eu",
        "expires_at": "2026-09-21T14:00:00+02:00"
    }
}

Eingang

Einchecken am Einlass.

GET /api/v1/check-ins #

Die Check-ins am Einlass.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: scanned_at, -scanned_at, created_at, -created_at, id, -id

  • filter[result] string · in der URL · optional

    Nach result filtern.

  • filter[from] string · in der URL · optional

    Nach from filtern.

  • filter[to] string · in der URL · optional

    Nach to filtern.

  • filter[ticket] string · in der URL · optional

    Nach ticket filtern.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/check-ins" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/check-ins');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/check-ins', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/check-ins", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Check-ins am Einlass.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": 1,
            "result": "ok",
            "ticket_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
            "pass_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
            "scanned_at": "2026-09-21T14:00:00+02:00",
            "undone_at": "2026-09-21T14:00:00+02:00",
            "by": {
                "type": "api_key",
                "name": "string"
            },
            "created_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

POST /api/v1/check-ins #

Jemanden einlassen.

Benötigtes Recht: write

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/check-ins" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/check-ins', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/check-ins', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/check-ins", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Jemanden einlassen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Dieser Code wurde bereits eingecheckt.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "result": "ok",
        "ticket_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "pass_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "scanned_at": "2026-09-21T14:00:00+02:00",
        "undone_at": "2026-09-21T14:00:00+02:00",
        "by": {
            "type": "api_key",
            "name": "string"
        },
        "created_at": "2026-09-21T14:00:00+02:00"
    }
}

DELETE /api/v1/check-ins/{id} #

Einen Check-in zurücknehmen.

Benötigtes Recht: write

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • Idempotency-Key string · als Header · optional

    Wiederholen Sie einen Aufruf gefahrlos: derselbe Schlüssel mit demselben Inhalt gibt dieselbe Antwort.

  • id integer · im Pfad · erforderlich

    Die ID des Check-ins.

Beispielaufruf

curl

curl -X DELETE "https://passavo.eu/api/v1/check-ins/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->delete('https://passavo.eu/api/v1/check-ins/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/check-ins/12', {
  method: 'DELETE',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.delete("https://passavo.eu/api/v1/check-ins/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Einen Check-in zurücknehmen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Die Bestellung ist nicht in einem Zustand, in dem das möglich ist.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "result": "ok",
        "ticket_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "pass_id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
        "scanned_at": "2026-09-21T14:00:00+02:00",
        "undone_at": "2026-09-21T14:00:00+02:00",
        "by": {
            "type": "api_key",
            "name": "string"
        },
        "created_at": "2026-09-21T14:00:00+02:00"
    }
}

Kunden

Käufer, zusammengefasst aus den Bestellungen.

GET /api/v1/customers #

Die Käufer, zusammengefasst je E-Mail-Adresse.

Benötigtes Recht: read

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: last_order_at, -last_order_at

  • filter[email] string · in der URL · optional

    Nach email filtern.

  • filter[search] string · in der URL · optional

    Nach search filtern.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/customers" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/customers');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/customers', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/customers", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Käufer, zusammengefasst je E-Mail-Adresse.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": "string",
            "email": "string",
            "name": "string",
            "orders": 1,
            "spent": {
                "amount_cent": 1,
                "currency": "EUR"
            },
            "first_order_at": "2026-09-21T14:00:00+02:00",
            "last_order_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

GET /api/v1/customers/{email}/orders #

Die Bestellungen einer E-Mail-Adresse.

Benötigtes Recht: read

Parameter

  • email string · im Pfad · erforderlich

    Die E-Mail-Adresse des Käufers, URL-codiert.

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, paid_at, -paid_at, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • include string · in der URL · optional

    Diese Beziehungen mitliefern: lines, tickets, payments, refunds.

    Werte: lines, tickets, payments, refunds

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/customers/12/orders" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/customers/12/orders');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/customers/12/orders', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/customers/12/orders", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Bestellungen einer E-Mail-Adresse.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": "string",
            "reference": "string",
            "status": "draft",
            "channel": "online",
            "venue_id": 1,
            "buyer": {
                "name": "string",
                "email": "string",
                "phone": "string",
                "note": "string",
                "locale": "string"
            },
            "totals": {
                "subtotal": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "discount": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "discount_code": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "voucher": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "vat": {
                    "amount_cent": 1,
                    "currency": "EUR"
                },
                "total": {
                    "amount_cent": 1,
                    "currency": "EUR"
                }
            },
            "discount_code": "string",
            "voucher_code": "string",
            "reserved_until": "2026-09-21T14:00:00+02:00",
            "sandbox": true,
            "test": true,
            "payment": {
                "provider": "string",
                "provider_ref": "string",
                "redirect_url": "string",
                "qr_code_url": "string"
            },
            "paid_at": "2026-09-21T14:00:00+02:00",
            "cancelled_at": "2026-09-21T14:00:00+02:00",
            "lines": [
                {
                    "id": 1,
                    "product_id": 1,
                    "slot_id": 1,
                    "description": "string",
                    "rate_id": 1,
                    "rate_name": "string",
                    "quantity": 1,
                    "seats": [
                        "string"
                    ],
                    "unit_price": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "line_total": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "vat_rate_bp": 1,
                    "vat": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "valid_on": "2026-09-21",
                    "created_at": "2026-09-21T14:00:00+02:00"
                }
            ],
            "tickets": [
                {
                    "id": "9f1c0b4a-6b2f-4a1b-9c7e-1f2d3e4a5b6c",
                    "order_line_id": 1,
                    "order_id": "string",
                    "product_id": 1,
                    "slot_id": 1,
                    "description": "string",
                    "rate_id": 1,
                    "rate_name": "string",
                    "holder_name": "string",
                    "seat": {
                        "id": 1,
                        "label": "string",
                        "section": "string",
                        "row": "string",
                        "number": "string"
                    },
                    "status": "valid",
                    "valid_on": "2026-09-21",
                    "is_scannable": true,
                    "used_at": "2026-09-21T14:00:00+02:00",
                    "created_at": "2026-09-21T14:00:00+02:00",
                    "updated_at": "2026-09-21T14:00:00+02:00"
                }
            ],
            "payments": [
                {
                    "id": 1,
                    "provider": "string",
                    "provider_ref": "string",
                    "method": "string",
                    "amount": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "status": "string",
                    "paid_at": "2026-09-21T14:00:00+02:00",
                    "created_at": "2026-09-21T14:00:00+02:00"
                }
            ],
            "refunds": [
                {
                    "id": 1,
                    "payment_id": 1,
                    "provider": "string",
                    "provider_ref": "string",
                    "amount": {
                        "amount_cent": 1,
                        "currency": "EUR"
                    },
                    "status": "pending",
                    "reason": "string",
                    "refunded_at": "2026-09-21T14:00:00+02:00",
                    "created_at": "2026-09-21T14:00:00+02:00"
                }
            ],
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

Meta

Die Beschreibung der API selbst.

GET /api/v1/openapi.json #

Die Beschreibung dieser API.

Benötigtes Recht: Kein Schlüssel nötig

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/openapi.json" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->get('https://passavo.eu/api/v1/openapi.json');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/openapi.json', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json"}
response = requests.get("https://passavo.eu/api/v1/openapi.json", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Beschreibung dieser API.

Beispielantwort

{}

Webhooks

Nachrichten, die wir an Ihren Server senden.

GET /api/v1/webhook-deliveries #

Das Zustellprotokoll der letzten dreißig Tage.

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, id, -id

  • filter[endpoint] string · in der URL · optional

    Nach endpoint filtern.

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • filter[event] string · in der URL · optional

    Nach event filtern.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/webhook-deliveries" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/webhook-deliveries');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-deliveries', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/webhook-deliveries", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Das Zustellprotokoll der letzten dreißig Tage.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": 1,
            "event_id": "string",
            "event": "order.created",
            "endpoint_id": 1,
            "status": "pending",
            "sandbox": true,
            "attempts": 1,
            "last_status_code": 1,
            "body_excerpt": "string",
            "error": "string",
            "next_attempt_at": "2026-09-21T14:00:00+02:00",
            "delivered_at": "2026-09-21T14:00:00+02:00",
            "payload": {
                "id": "string",
                "type": "order.created",
                "created_at": "2026-09-21T14:00:00+02:00",
                "organisation_id": 1,
                "sandbox": true,
                "data": {}
            },
            "created_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

GET /api/v1/webhook-deliveries/{id} #

Eine Zustellung.

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die Id der Zustellung.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/webhook-deliveries/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/webhook-deliveries/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-deliveries/12', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/webhook-deliveries/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Eine Zustellung.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "event_id": "string",
        "event": "order.created",
        "endpoint_id": 1,
        "status": "pending",
        "sandbox": true,
        "attempts": 1,
        "last_status_code": 1,
        "body_excerpt": "string",
        "error": "string",
        "next_attempt_at": "2026-09-21T14:00:00+02:00",
        "delivered_at": "2026-09-21T14:00:00+02:00",
        "payload": {
            "id": "string",
            "type": "order.created",
            "created_at": "2026-09-21T14:00:00+02:00",
            "organisation_id": 1,
            "sandbox": true,
            "data": {}
        },
        "created_at": "2026-09-21T14:00:00+02:00"
    }
}

POST /api/v1/webhook-deliveries/{id}/retry #

Eine fehlgeschlagene Zustellung erneut anbieten.

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die Id der Zustellung.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/webhook-deliveries/12/retry" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->post('https://passavo.eu/api/v1/webhook-deliveries/12/retry');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-deliveries/12/retry', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.post("https://passavo.eu/api/v1/webhook-deliveries/12/retry", headers=headers)
data = response.json()["data"]

Antworten

  • 202 — Eine fehlgeschlagene Zustellung erneut anbieten.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "event_id": "string",
        "event": "order.created",
        "endpoint_id": 1,
        "status": "pending",
        "sandbox": true,
        "attempts": 1,
        "last_status_code": 1,
        "body_excerpt": "string",
        "error": "string",
        "next_attempt_at": "2026-09-21T14:00:00+02:00",
        "delivered_at": "2026-09-21T14:00:00+02:00",
        "payload": {
            "id": "string",
            "type": "order.created",
            "created_at": "2026-09-21T14:00:00+02:00",
            "organisation_id": 1,
            "sandbox": true,
            "data": {}
        },
        "created_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/webhook-endpoints #

Die Ziele, an denen Sie benachrichtigt werden.

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • page[size] integer · in der URL · optional

    Anzahl pro Seite, höchstens 100.

  • page[cursor] string · in der URL · optional

    Der next_cursor der vorherigen Seite.

  • sort string · in der URL · optional

    Sortieren; ein vorangestellter Bindestrich kehrt die Reihenfolge um.

    Werte: created_at, -created_at, id, -id

  • filter[status] string · in der URL · optional

    Nach status filtern.

  • filter[sandbox] string · in der URL · optional

    Nach sandbox filtern.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/webhook-endpoints" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/webhook-endpoints');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-endpoints', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/webhook-endpoints", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Die Ziele, an denen Sie benachrichtigt werden.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": [
        {
            "id": 1,
            "url": "https://passavo.eu",
            "description": "string",
            "events": [
                "order.created"
            ],
            "status": "active",
            "sandbox": true,
            "consecutive_failures": 1,
            "last_delivery_at": "2026-09-21T14:00:00+02:00",
            "last_status_code": 1,
            "disabled_at": "2026-09-21T14:00:00+02:00",
            "disabled_reason": "string",
            "created_at": "2026-09-21T14:00:00+02:00",
            "updated_at": "2026-09-21T14:00:00+02:00"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

POST /api/v1/webhook-endpoints #

Ein Ziel anlegen; das Geheimnis kommt nur einmal zurück.

Benötigtes Recht: webhooks

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/webhook-endpoints" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->post('https://passavo.eu/api/v1/webhook-endpoints', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-endpoints', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.post("https://passavo.eu/api/v1/webhook-endpoints", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 201 — Ein Ziel anlegen; das Geheimnis kommt nur einmal zurück.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 409 — Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "url": "https://passavo.eu",
        "description": "string",
        "events": [
            "order.created"
        ],
        "status": "active",
        "sandbox": true,
        "consecutive_failures": 1,
        "last_delivery_at": "2026-09-21T14:00:00+02:00",
        "last_status_code": 1,
        "disabled_at": "2026-09-21T14:00:00+02:00",
        "disabled_reason": "string",
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/webhook-endpoints/{id} #

Ein Ziel.

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die Id des Ziels.

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/webhook-endpoints/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/webhook-endpoints/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-endpoints/12', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/webhook-endpoints/12", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Ein Ziel.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "url": "https://passavo.eu",
        "description": "string",
        "events": [
            "order.created"
        ],
        "status": "active",
        "sandbox": true,
        "consecutive_failures": 1,
        "last_delivery_at": "2026-09-21T14:00:00+02:00",
        "last_status_code": 1,
        "disabled_at": "2026-09-21T14:00:00+02:00",
        "disabled_reason": "string",
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

PATCH /api/v1/webhook-endpoints/{id} #

Ein Ziel ändern.

Benötigtes Recht: webhooks

Dieser Aufruf schickt einen Body mit.

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die Id des Ziels.

Beispielaufruf

curl

curl -X PATCH "https://passavo.eu/api/v1/webhook-endpoints/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

PHP

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->withHeader('Idempotency-Key', (string) Str::uuid())
    ->patch('https://passavo.eu/api/v1/webhook-endpoints/12', []);

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-endpoints/12', {
  method: 'PATCH',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({}),
});

const { data } = await response.json();

Python

import uuid

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY", "Idempotency-Key": str(uuid.uuid4())}
response = requests.patch("https://passavo.eu/api/v1/webhook-endpoints/12", headers=headers, json={})
data = response.json()["data"]

Antworten

  • 200 — Ein Ziel ändern.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "url": "https://passavo.eu",
        "description": "string",
        "events": [
            "order.created"
        ],
        "status": "active",
        "sandbox": true,
        "consecutive_failures": 1,
        "last_delivery_at": "2026-09-21T14:00:00+02:00",
        "last_status_code": 1,
        "disabled_at": "2026-09-21T14:00:00+02:00",
        "disabled_reason": "string",
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

DELETE /api/v1/webhook-endpoints/{id} #

Ein Ziel löschen, samt seinem Zustellprotokoll.

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die Id des Ziels.

Beispielaufruf

curl

curl -X DELETE "https://passavo.eu/api/v1/webhook-endpoints/12" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->delete('https://passavo.eu/api/v1/webhook-endpoints/12');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-endpoints/12', {
  method: 'DELETE',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.delete("https://passavo.eu/api/v1/webhook-endpoints/12", headers=headers)
data = response.json()["data"]

Antworten

  • 204 — Ein Ziel löschen, samt seinem Zustellprotokoll.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

POST /api/v1/webhook-endpoints/{id}/rotate-secret #

Ein neues Geheimnis vergeben; das alte funktioniert sofort nicht mehr.

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die Id des Ziels.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/webhook-endpoints/12/rotate-secret" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->post('https://passavo.eu/api/v1/webhook-endpoints/12/rotate-secret');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-endpoints/12/rotate-secret', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.post("https://passavo.eu/api/v1/webhook-endpoints/12/rotate-secret", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Ein neues Geheimnis vergeben; das alte funktioniert sofort nicht mehr.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "id": 1,
        "url": "https://passavo.eu",
        "description": "string",
        "events": [
            "order.created"
        ],
        "status": "active",
        "sandbox": true,
        "consecutive_failures": 1,
        "last_delivery_at": "2026-09-21T14:00:00+02:00",
        "last_status_code": 1,
        "disabled_at": "2026-09-21T14:00:00+02:00",
        "disabled_reason": "string",
        "created_at": "2026-09-21T14:00:00+02:00",
        "updated_at": "2026-09-21T14:00:00+02:00"
    }
}

GET /api/v1/webhook-endpoints/{id}/sample #

Ein signiertes Beispiel, um Ihre eigene Prüfung zu testen.

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die Id des Ziels.

  • event string · in der URL · optional

    Welches Ereignis das Beispiel nachahmt; standardmäßig test.ping.

    Werte: order.created, order.paid, order.cancelled, order.refunded, ticket.issued, ticket.scanned, ticket.voided, slot.sold_out, slot.reopened, voucher.issued, voucher.redeemed, pass.issued, pos.session_closed, invoice.issued, test.ping

Beispielaufruf

curl

curl "https://passavo.eu/api/v1/webhook-endpoints/12/sample" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->get('https://passavo.eu/api/v1/webhook-endpoints/12/sample');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-endpoints/12/sample', {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.get("https://passavo.eu/api/v1/webhook-endpoints/12/sample", headers=headers)
data = response.json()["data"]

Antworten

  • 200 — Ein signiertes Beispiel, um Ihre eigene Prüfung zu testen.
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "endpoint_id": 1,
        "event": "string",
        "headers": {},
        "body": "string",
        "payload": {
            "id": "string",
            "type": "order.created",
            "created_at": "2026-09-21T14:00:00+02:00",
            "organisation_id": 1,
            "sandbox": true,
            "data": {}
        },
        "signature": {
            "header": "string",
            "timestamp": 1,
            "scheme": "string",
            "signed_payload": "string",
            "tolerance_seconds": 1
        }
    }
}

POST /api/v1/webhook-endpoints/{id}/test #

Eine Testnachricht senden (test.ping).

Benötigtes Recht: webhooks

Parameter

  • Accept-Language string · als Header · optional

    Die Sprache der übersetzten Felder, mit Rückfall auf die Sprache der Organisation.

  • id integer · im Pfad · erforderlich

    Die Id des Ziels.

Beispielaufruf

curl

curl -X POST "https://passavo.eu/api/v1/webhook-endpoints/12/test" \
  -H "Authorization: Bearer pv_live_YOUR_API_KEY" \
  -H "Accept: application/json"

PHP

use Illuminate\Support\Facades\Http;

$response = Http::acceptJson()
    ->withToken('pv_live_YOUR_API_KEY')
    ->post('https://passavo.eu/api/v1/webhook-endpoints/12/test');

$data = $response->json('data');

JavaScript

const response = await fetch('https://passavo.eu/api/v1/webhook-endpoints/12/test', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    Authorization: 'Bearer pv_live_YOUR_API_KEY',
  },
});

const { data } = await response.json();

Python

import requests

headers = {"Accept": "application/json", "Authorization": "Bearer pv_live_YOUR_API_KEY"}
response = requests.post("https://passavo.eu/api/v1/webhook-endpoints/12/test", headers=headers)
data = response.json()["data"]

Antworten

  • 202 — Eine Testnachricht senden (test.ping).
  • 401 — Dieser Schlüssel ist nicht gültig.
  • 403 — Dieser Schlüssel darf das nicht.
  • 404 — Nicht gefunden.
  • 409 — Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet.
  • 422 — Die Anfrage stimmt nicht.
  • 429 — Zu viele Aufrufe. Versuchen Sie es in 60 Sekunden erneut.

Beispielantwort

{
    "data": {
        "endpoint_id": 1,
        "event": "string",
        "delivery_id": 1,
        "event_id": "string"
    }
}
Fragen? Schreiben Sie uns

Fragen Sie uns

Wir antworten per E-Mail, an Werktagen meist innerhalb weniger Stunden.

An diese Adresse senden wir unsere Antwort.

Wir verwenden Ihre Angaben nur, um Ihnen zu antworten. Mehr dazu in unserer Datenschutz

Lieber gleich ein Gespräch? Kurze Demo vereinbaren