Crear, pagar, cancelar y reembolsar pedidos.
GET
/api/v1/orders
#
Los pedidos de la organización.
Derecho necesario:
read
Parámetros
-
Accept-Language
string
· como cabecera
· opcional
El idioma de los campos traducidos, con respaldo en el idioma de la organización.
-
page[size]
integer
· en la url
· opcional
Cantidad por página, como máximo 100.
-
page[cursor]
string
· en la url
· opcional
El next_cursor de la página anterior.
-
sort
string
· en la url
· opcional
Ordenar; un guion delante invierte el orden.
Valores:
created_at, -created_at, paid_at, -paid_at, total_cent, -total_cent, id, -id
-
filter[status]
string
· en la url
· opcional
Filtrar por status.
-
filter[channel]
string
· en la url
· opcional
Filtrar por channel.
-
filter[reference]
string
· en la url
· opcional
Filtrar por reference.
-
filter[email]
string
· en la url
· opcional
Filtrar por email.
-
filter[from]
string
· en la url
· opcional
Filtrar por from.
-
filter[to]
string
· en la url
· opcional
Filtrar por to.
-
filter[sandbox]
string
· en la url
· opcional
Filtrar por sandbox.
-
include
string
· en la url
· opcional
Incluir estas relaciones: lines, tickets, payments, refunds.
Valores:
lines, tickets, payments, refunds
Ejemplo de llamada
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"]
Respuestas
-
200
— Los pedidos de la organización.
-
401
— Esta clave no es válida.
-
403
— Esta clave no tiene permiso para esto.
-
422
— La solicitud no es correcta.
-
429
— Demasiadas llamadas. Vuelva a intentarlo en 60 segundos.
Ejemplo de respuesta
{
"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
#
Un pedido nuevo, con las plazas reservadas.
Derecho necesario:
write
Esta llamada envía un cuerpo de petición.
Parámetros
-
Accept-Language
string
· como cabecera
· opcional
El idioma de los campos traducidos, con respaldo en el idioma de la organización.
-
Idempotency-Key
string
· como cabecera
· obligatorio
Obligatorio. Sin esta clave, un reintento tras un error de red puede generar un segundo pedido o un segundo vale.
Ejemplo de llamada
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"]
Respuestas
-
201
— Un pedido nuevo, con las plazas reservadas.
-
401
— Esta clave no es válida.
-
403
— Esta clave no tiene permiso para esto.
-
404
— No encontrado.
-
409
— La franja horaria está llena o ya ha empezado.
-
422
— La solicitud no es correcta.
-
429
— Demasiadas llamadas. Vuelva a intentarlo en 60 segundos.
Ejemplo de respuesta
{
"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}
#
Un solo pedido.
Derecho necesario:
read
Parámetros
-
Accept-Language
string
· como cabecera
· opcional
El idioma de los campos traducidos, con respaldo en el idioma de la organización.
-
id
string
· en la ruta
· obligatorio
La referencia del pedido, p. ej. ORD-AB12CD34EF.
-
include
string
· en la url
· opcional
Incluir estas relaciones: lines, tickets, payments, refunds.
Valores:
lines, tickets, payments, refunds
Ejemplo de llamada
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"]
Respuestas
-
200
— Un solo pedido.
-
401
— Esta clave no es válida.
-
403
— Esta clave no tiene permiso para esto.
-
404
— No encontrado.
-
422
— La solicitud no es correcta.
-
429
— Demasiadas llamadas. Vuelva a intentarlo en 60 segundos.
Ejemplo de respuesta
{
"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
#
Cancelar y devolver las plazas.
Derecho necesario:
write
Parámetros
-
Accept-Language
string
· como cabecera
· opcional
El idioma de los campos traducidos, con respaldo en el idioma de la organización.
-
Idempotency-Key
string
· como cabecera
· opcional
Repita una llamada de forma segura: la misma clave con el mismo contenido devuelve la misma respuesta.
-
id
string
· en la ruta
· obligatorio
La referencia del pedido, p. ej. ORD-AB12CD34EF.
Ejemplo de llamada
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"]
Respuestas
-
200
— Cancelar y devolver las plazas.
-
401
— Esta clave no es válida.
-
403
— Esta clave no tiene permiso para esto.
-
404
— No encontrado.
-
409
— Este pedido no se puede cancelar.
-
422
— La solicitud no es correcta.
-
429
— Demasiadas llamadas. Vuelva a intentarlo en 60 segundos.
Ejemplo de respuesta
{
"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
#
El enlace de pago del proveedor conectado.
Derecho necesario:
write
Esta llamada envía un cuerpo de petición.
Parámetros
-
Accept-Language
string
· como cabecera
· opcional
El idioma de los campos traducidos, con respaldo en el idioma de la organización.
-
Idempotency-Key
string
· como cabecera
· opcional
Repita una llamada de forma segura: la misma clave con el mismo contenido devuelve la misma respuesta.
-
id
string
· en la ruta
· obligatorio
La referencia del pedido, p. ej. ORD-AB12CD34EF.
Ejemplo de llamada
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"]
Respuestas
-
200
— El enlace de pago del proveedor conectado.
-
401
— Esta clave no es válida.
-
403
— Esta clave no tiene permiso para esto.
-
404
— No encontrado.
-
409
— Esta organización no tiene ningún proveedor de pago conectado.
-
422
— La solicitud no es correcta.
-
429
— Demasiadas llamadas. Vuelva a intentarlo en 60 segundos.
Ejemplo de respuesta
{
"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
#
Solicitar una factura a nombre del comprador.
Derecho necesario:
write
Esta llamada envía un cuerpo de petición.
Parámetros
-
Accept-Language
string
· como cabecera
· opcional
El idioma de los campos traducidos, con respaldo en el idioma de la organización.
-
Idempotency-Key
string
· como cabecera
· opcional
Repita una llamada de forma segura: la misma clave con el mismo contenido devuelve la misma respuesta.
-
id
string
· en la ruta
· obligatorio
La referencia del pedido, p. ej. ORD-AB12CD34EF.
Ejemplo de llamada
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"]
Respuestas
-
201
— Solicitar una factura a nombre del comprador.
-
401
— Esta clave no es válida.
-
403
— Esta clave no tiene permiso para esto.
-
404
— No encontrado.
-
409
— El pedido no está en un estado que lo permita.
-
422
— La solicitud no es correcta.
-
429
— Demasiadas llamadas. Vuelva a intentarlo en 60 segundos.
Ejemplo de respuesta
{
"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
#
Pagado al margen del proveedor (transferencia, efectivo).
Derecho necesario:
write
Esta llamada envía un cuerpo de petición.
Parámetros
-
Accept-Language
string
· como cabecera
· opcional
El idioma de los campos traducidos, con respaldo en el idioma de la organización.
-
Idempotency-Key
string
· como cabecera
· opcional
Repita una llamada de forma segura: la misma clave con el mismo contenido devuelve la misma respuesta.
-
id
string
· en la ruta
· obligatorio
La referencia del pedido, p. ej. ORD-AB12CD34EF.
Ejemplo de llamada
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"]
Respuestas
-
200
— Pagado al margen del proveedor (transferencia, efectivo).
-
401
— Esta clave no es válida.
-
403
— Esta clave no tiene permiso para esto.
-
404
— No encontrado.
-
409
— El pedido no está en un estado que lo permita.
-
422
— La solicitud no es correcta.
-
429
— Demasiadas llamadas. Vuelva a intentarlo en 60 segundos.
Ejemplo de respuesta
{
"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
#
Reembolsar total o parcialmente.
Derecho necesario:
write
Esta llamada envía un cuerpo de petición.
Parámetros
-
Accept-Language
string
· como cabecera
· opcional
El idioma de los campos traducidos, con respaldo en el idioma de la organización.
-
Idempotency-Key
string
· como cabecera
· opcional
Repita una llamada de forma segura: la misma clave con el mismo contenido devuelve la misma respuesta.
-
id
string
· en la ruta
· obligatorio
La referencia del pedido, p. ej. ORD-AB12CD34EF.
Ejemplo de llamada
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"]
Respuestas
-
201
— Reembolsar total o parcialmente.
-
401
— Esta clave no es válida.
-
403
— Esta clave no tiene permiso para esto.
-
404
— No encontrado.
-
409
— Ya no queda nada por reembolsar.
-
422
— La solicitud no es correcta.
-
429
— Demasiadas llamadas. Vuelva a intentarlo en 60 segundos.
Ejemplo de respuesta
{
"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 página de pago simulada del sandbox.
Derecho necesario:
No hace falta clave
Parámetros
-
reference
string
· en la ruta
· obligatorio
La referencia del pedido, p. ej. ORD-AB12CD34EF.
-
signature
string
· en la url
· opcional
La firma del enlace; no la modifique.
-
expires
integer
· en la url
· opcional
Cuándo caduca el enlace, como marca de tiempo.
-
return_url
string
· en la url
· opcional
Adónde va el comprador al terminar.
Ejemplo de llamada
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"]
Respuestas
-
200
— La página de pago simulada del sandbox.
-
302
— Vuelta a la return_url de la integración.
-
403
— Este enlace no es válido o ha caducado.
-
404
— No encontrado.
POST
/api/v1/sandbox/payments/{reference}
#
Finalizar el pago simulado.
Derecho necesario:
No hace falta clave
Parámetros
-
reference
string
· en la ruta
· obligatorio
La referencia del pedido, p. ej. ORD-AB12CD34EF.
-
signature
string
· en la url
· opcional
La firma del enlace; no la modifique.
-
expires
integer
· en la url
· opcional
Cuándo caduca el enlace, como marca de tiempo.
-
return_url
string
· en la url
· opcional
Adónde va el comprador al terminar.
Ejemplo de llamada
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"]
Respuestas
-
200
— Finalizar el pago simulado.
-
302
— Vuelta a la return_url de la integración.
-
403
— Este enlace no es válido o ha caducado.
-
404
— No encontrado.