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",
"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",
"quantity": 1,
"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",
"holder_name": "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",
"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",
"quantity": 1,
"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",
"holder_name": "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",
"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",
"quantity": 1,
"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",
"holder_name": "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",
"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",
"quantity": 1,
"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",
"holder_name": "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",
"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",
"quantity": 1,
"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",
"holder_name": "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",
"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",
"quantity": 1,
"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",
"holder_name": "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.