Créer, payer, annuler et rembourser des commandes.
GET
/api/v1/orders
#
Les commandes de l'organisation.
Droit requis:
read
Paramètres
-
Accept-Language
string
· en en-tête
· facultatif
La langue des champs traduits, avec repli sur la langue de l'organisation.
-
page[size]
integer
· dans l’url
· facultatif
Nombre par page, au maximum 100.
-
page[cursor]
string
· dans l’url
· facultatif
Le next_cursor de la page précédente.
-
sort
string
· dans l’url
· facultatif
Trier ; un tiret devant inverse l'ordre.
Valeurs:
created_at, -created_at, paid_at, -paid_at, total_cent, -total_cent, id, -id
-
filter[status]
string
· dans l’url
· facultatif
Filtrer sur status.
-
filter[channel]
string
· dans l’url
· facultatif
Filtrer sur channel.
-
filter[reference]
string
· dans l’url
· facultatif
Filtrer sur reference.
-
filter[email]
string
· dans l’url
· facultatif
Filtrer sur email.
-
filter[from]
string
· dans l’url
· facultatif
Filtrer sur from.
-
filter[to]
string
· dans l’url
· facultatif
Filtrer sur to.
-
filter[sandbox]
string
· dans l’url
· facultatif
Filtrer sur sandbox.
-
include
string
· dans l’url
· facultatif
Inclure ces relations : lines, tickets, payments, refunds.
Valeurs:
lines, tickets, payments, refunds
Exemple d’appel
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"]
Réponses
-
200
— Les commandes de l'organisation.
-
401
— Cette clé n'est pas valide.
-
403
— Cette clé n'a pas le droit de faire cela.
-
422
— La requête est incorrecte.
-
429
— Trop d'appels. Réessayez dans 60 secondes.
Exemple de réponse
{
"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
#
Une nouvelle commande, avec les places réservées.
Droit requis:
write
Cet appel envoie un corps de requête.
Paramètres
-
Accept-Language
string
· en en-tête
· facultatif
La langue des champs traduits, avec repli sur la langue de l'organisation.
-
Idempotency-Key
string
· en en-tête
· obligatoire
Obligatoire. Sans cette clé, une répétition après une erreur réseau peut créer une deuxième commande ou un deuxième bon.
Exemple d’appel
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"]
Réponses
-
201
— Une nouvelle commande, avec les places réservées.
-
401
— Cette clé n'est pas valide.
-
403
— Cette clé n'a pas le droit de faire cela.
-
404
— Introuvable.
-
409
— Le créneau est complet ou a déjà commencé.
-
422
— La requête est incorrecte.
-
429
— Trop d'appels. Réessayez dans 60 secondes.
Exemple de réponse
{
"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}
#
Une seule commande.
Droit requis:
read
Paramètres
-
Accept-Language
string
· en en-tête
· facultatif
La langue des champs traduits, avec repli sur la langue de l'organisation.
-
id
string
· dans le chemin
· obligatoire
La référence de la commande, p.ex. ORD-AB12CD34EF.
-
include
string
· dans l’url
· facultatif
Inclure ces relations : lines, tickets, payments, refunds.
Valeurs:
lines, tickets, payments, refunds
Exemple d’appel
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"]
Réponses
-
200
— Une seule commande.
-
401
— Cette clé n'est pas valide.
-
403
— Cette clé n'a pas le droit de faire cela.
-
404
— Introuvable.
-
422
— La requête est incorrecte.
-
429
— Trop d'appels. Réessayez dans 60 secondes.
Exemple de réponse
{
"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
#
Annuler et rendre les places.
Droit requis:
write
Paramètres
-
Accept-Language
string
· en en-tête
· facultatif
La langue des champs traduits, avec repli sur la langue de l'organisation.
-
Idempotency-Key
string
· en en-tête
· facultatif
Répétez un appel sans risque : la même clé avec le même contenu renvoie la même réponse.
-
id
string
· dans le chemin
· obligatoire
La référence de la commande, p.ex. ORD-AB12CD34EF.
Exemple d’appel
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"]
Réponses
-
200
— Annuler et rendre les places.
-
401
— Cette clé n'est pas valide.
-
403
— Cette clé n'a pas le droit de faire cela.
-
404
— Introuvable.
-
409
— Cette commande ne peut pas être annulée.
-
422
— La requête est incorrecte.
-
429
— Trop d'appels. Réessayez dans 60 secondes.
Exemple de réponse
{
"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
#
Le lien de paiement du prestataire connecté.
Droit requis:
write
Cet appel envoie un corps de requête.
Paramètres
-
Accept-Language
string
· en en-tête
· facultatif
La langue des champs traduits, avec repli sur la langue de l'organisation.
-
Idempotency-Key
string
· en en-tête
· facultatif
Répétez un appel sans risque : la même clé avec le même contenu renvoie la même réponse.
-
id
string
· dans le chemin
· obligatoire
La référence de la commande, p.ex. ORD-AB12CD34EF.
Exemple d’appel
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"]
Réponses
-
200
— Le lien de paiement du prestataire connecté.
-
401
— Cette clé n'est pas valide.
-
403
— Cette clé n'a pas le droit de faire cela.
-
404
— Introuvable.
-
409
— Cette organisation n'a aucun prestataire de paiement connecté.
-
422
— La requête est incorrecte.
-
429
— Trop d'appels. Réessayez dans 60 secondes.
Exemple de réponse
{
"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
#
Demander une facture nominative.
Droit requis:
write
Cet appel envoie un corps de requête.
Paramètres
-
Accept-Language
string
· en en-tête
· facultatif
La langue des champs traduits, avec repli sur la langue de l'organisation.
-
Idempotency-Key
string
· en en-tête
· facultatif
Répétez un appel sans risque : la même clé avec le même contenu renvoie la même réponse.
-
id
string
· dans le chemin
· obligatoire
La référence de la commande, p.ex. ORD-AB12CD34EF.
Exemple d’appel
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"]
Réponses
-
201
— Demander une facture nominative.
-
401
— Cette clé n'est pas valide.
-
403
— Cette clé n'a pas le droit de faire cela.
-
404
— Introuvable.
-
409
— La commande n'est pas dans un état qui le permet.
-
422
— La requête est incorrecte.
-
429
— Trop d'appels. Réessayez dans 60 secondes.
Exemple de réponse
{
"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
#
Payé en dehors du prestataire (virement, espèces).
Droit requis:
write
Cet appel envoie un corps de requête.
Paramètres
-
Accept-Language
string
· en en-tête
· facultatif
La langue des champs traduits, avec repli sur la langue de l'organisation.
-
Idempotency-Key
string
· en en-tête
· facultatif
Répétez un appel sans risque : la même clé avec le même contenu renvoie la même réponse.
-
id
string
· dans le chemin
· obligatoire
La référence de la commande, p.ex. ORD-AB12CD34EF.
Exemple d’appel
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"]
Réponses
-
200
— Payé en dehors du prestataire (virement, espèces).
-
401
— Cette clé n'est pas valide.
-
403
— Cette clé n'a pas le droit de faire cela.
-
404
— Introuvable.
-
409
— La commande n'est pas dans un état qui le permet.
-
422
— La requête est incorrecte.
-
429
— Trop d'appels. Réessayez dans 60 secondes.
Exemple de réponse
{
"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
#
Rembourser en totalité ou en partie.
Droit requis:
write
Cet appel envoie un corps de requête.
Paramètres
-
Accept-Language
string
· en en-tête
· facultatif
La langue des champs traduits, avec repli sur la langue de l'organisation.
-
Idempotency-Key
string
· en en-tête
· facultatif
Répétez un appel sans risque : la même clé avec le même contenu renvoie la même réponse.
-
id
string
· dans le chemin
· obligatoire
La référence de la commande, p.ex. ORD-AB12CD34EF.
Exemple d’appel
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"]
Réponses
-
201
— Rembourser en totalité ou en partie.
-
401
— Cette clé n'est pas valide.
-
403
— Cette clé n'a pas le droit de faire cela.
-
404
— Introuvable.
-
409
— Il n'y a (plus) rien à rembourser.
-
422
— La requête est incorrecte.
-
429
— Trop d'appels. Réessayez dans 60 secondes.
Exemple de réponse
{
"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}
#
La page de paiement simulée de la sandbox.
Droit requis:
Aucune clé nécessaire
Paramètres
-
reference
string
· dans le chemin
· obligatoire
La référence de la commande, p.ex. ORD-AB12CD34EF.
-
signature
string
· dans l’url
· facultatif
La signature issue du lien ; ne la modifiez pas.
-
expires
integer
· dans l’url
· facultatif
Quand le lien expire, sous forme d'horodatage.
-
return_url
string
· dans l’url
· facultatif
Où l'acheteur arrive à la fin.
Exemple d’appel
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"]
Réponses
-
200
— La page de paiement simulée de la sandbox.
-
302
— Retour vers la return_url de l'intégration.
-
403
— Ce lien n'est pas valide ou a expiré.
-
404
— Introuvable.
POST
/api/v1/sandbox/payments/{reference}
#
Finaliser le paiement simulé.
Droit requis:
Aucune clé nécessaire
Paramètres
-
reference
string
· dans le chemin
· obligatoire
La référence de la commande, p.ex. ORD-AB12CD34EF.
-
signature
string
· dans l’url
· facultatif
La signature issue du lien ; ne la modifiez pas.
-
expires
integer
· dans l’url
· facultatif
Quand le lien expire, sous forme d'horodatage.
-
return_url
string
· dans l’url
· facultatif
Où l'acheteur arrive à la fin.
Exemple d’appel
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"]
Réponses
-
200
— Finaliser le paiement simulé.
-
302
— Retour vers la return_url de l'intégration.
-
403
— Ce lien n'est pas valide ou a expiré.
-
404
— Introuvable.