Към съдържанието
Passavo
Меню

API справочник

Всеки endpoint с правата, параметрите и отговорите си. Тази страница се генерира от самото openapi описание, така че написаното тук стои и в кода.

47 endpoint-а, версия 2026-09-20.

Базов адрес

https://passavo.eu/api/v1

Внасяне в Postman или Insomnia

В Postman изберете „Import“ и поставете връзката отгоре или плъзнете свалените файлове вътре; Insomnia прави същото под „Import from URL“. Веднага получавате всеки endpoint като повикване, което можете да изпълните — после добавете собствения си ключ като bearer токен.

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

Акаунт

Кой съм аз и какво мога.

GET /api/v1/me #

Организацията, планът и правата на този ключ.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Организацията, планът и правата на този ключ.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

Каталог

Локации, продукти и цени.

GET /api/v1/events #

Събитията и сериите, по дата.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: event_date, -event_date, created_at, -created_at, sort_order, -sort_order, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • filter[type] string · в адреса · по избор

    Филтър по type.

  • filter[from] string · в адреса · по избор

    Филтър по from.

  • filter[to] string · в адреса · по избор

    Филтър по to.

  • include string · в адреса · по избор

    Включете тези връзки: venue.

    Стойности: venue

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Събитията и сериите, по дата.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

GET /api/v1/products #

Продуктите с техните цени.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, sort_order, -sort_order, event_date, -event_date, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • filter[type] string · в адреса · по избор

    Филтър по type.

  • filter[venue_id] string · в адреса · по избор

    Филтър по venue_id.

  • include string · в адреса · по избор

    Включете тези връзки: venue.

    Стойности: venue

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Продуктите с техните цени.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Един продукт.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на продукта.

  • include string · в адреса · по избор

    Включете тези връзки: venue.

    Стойности: venue

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Един продукт.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

GET /api/v1/venues #

Локациите на организацията.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, name, -name, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • include string · в адреса · по избор

    Включете тези връзки: products.

    Стойности: products

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Локациите на организацията.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Една локация.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на локацията.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Една локация.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

Наличност

Часови слотове и свободни места.

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

Часовите слотове на продукт, със свободните места.

Нужно право: read

Параметри

  • id integer · в пътя · задължителен

    Идентификаторът на продукта.

  • from string · в адреса · по избор

    Начало на прозореца; по подразбиране днес.

  • to string · в адреса · по избор

    Край на прозореца; по подразбиране 31 дни по-късно.

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: starts_at, -starts_at, created_at, -created_at, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Часовите слотове на продукт, със свободните места.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

Продажби

Отстъпки, ваучери и годишни карти.

GET /api/v1/discounts #

Кодовете за отстъпка.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, code, -code, valid_until, -valid_until, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • filter[type] string · в адреса · по избор

    Филтър по type.

  • filter[code] string · в адреса · по избор

    Филтър по code.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Кодовете за отстъпка.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

GET /api/v1/passes #

Годишните карти.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, valid_until, -valid_until, valid_from, -valid_from, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • filter[product_id] string · в адреса · по избор

    Филтър по product_id.

  • include string · в адреса · по избор

    Включете тези връзки: product.

    Стойности: product

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Годишните карти.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

POST /api/v1/passes #

Издаване на именна годишна карта.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

Примерно повикване

curl

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

PHP

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

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

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

JavaScript

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

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

Python

import uuid

import requests

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

Отговори

  • 201 — Издаване на именна годишна карта.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Подновяване на годишна карта; това създава нова карта.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • id string · в пътя · задължителен

    UUID на годишната карта.

Примерно повикване

curl

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

PHP

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

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

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

JavaScript

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

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

Python

import uuid

import requests

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

Отговори

  • 201 — Подновяване на годишна карта; това създава нова карта.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

POST /api/v1/vouchers #

Издаване на ваучер.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

Примерно повикване

curl

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

PHP

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

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

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

JavaScript

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

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

Python

import uuid

import requests

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

Отговори

  • 201 — Издаване на ваучер.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Салдото на един ваучер.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • code string · в пътя · задължителен

    Кодът на ваучера.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Салдото на един ваучер.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Отписване на част от ваучер.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • code string · в пътя · задължителен

    Кодът на ваучера.

Примерно повикване

curl

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

PHP

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

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

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

JavaScript

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

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

Python

import uuid

import requests

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

Отговори

  • 201 — Отписване на част от ваучер.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

Поръчки

Създаване, плащане, отменяне и възстановяване на поръчки.

GET /api/v1/orders #

Поръчките на организацията.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, paid_at, -paid_at, total_cent, -total_cent, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • filter[channel] string · в адреса · по избор

    Филтър по channel.

  • filter[reference] string · в адреса · по избор

    Филтър по reference.

  • filter[email] string · в адреса · по избор

    Филтър по email.

  • filter[from] string · в адреса · по избор

    Филтър по from.

  • filter[to] string · в адреса · по избор

    Филтър по to.

  • filter[sandbox] string · в адреса · по избор

    Филтър по sandbox.

  • include string · в адреса · по избор

    Включете тези връзки: lines, tickets, payments, refunds.

    Стойности: lines, tickets, payments, refunds

Примерно повикване

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"]

Отговори

  • 200 — Поръчките на организацията.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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 #

Нова поръчка, със запазени места.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · задължителен

    Задължително. Без този ключ повторен опит след мрежова грешка може да създаде втора поръчка или втори ваучер.

Примерно повикване

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"]

Отговори

  • 201 — Нова поръчка, със запазени места.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Часовият слот е пълен или вече е започнал.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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} #

Една поръчка.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id string · в пътя · задължителен

    Референцията на поръчката, напр. ORD-AB12CD34EF.

  • include string · в адреса · по избор

    Включете тези връзки: lines, tickets, payments, refunds.

    Стойности: lines, tickets, payments, refunds

Примерно повикване

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"]

Отговори

  • 200 — Една поръчка.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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 #

Отменяне и връщане на местата.

Нужно право: write

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • id string · в пътя · задължителен

    Референцията на поръчката, напр. ORD-AB12CD34EF.

Примерно повикване

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"]

Отговори

  • 200 — Отменяне и връщане на местата.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Тази поръчка не може да бъде отменена.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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 #

Връзката за плащане на свързания доставчик.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • id string · в пътя · задължителен

    Референцията на поръчката, напр. ORD-AB12CD34EF.

Примерно повикване

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"]

Отговори

  • 200 — Връзката за плащане на свързания доставчик.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Тази организация няма свързан доставчик на плащания.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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 #

Заявка за фактура на име.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • id string · в пътя · задължителен

    Референцията на поръчката, напр. ORD-AB12CD34EF.

Примерно повикване

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"]

Отговори

  • 201 — Заявка за фактура на име.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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 #

Платено извън доставчика (банков превод, в брой).

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • id string · в пътя · задължителен

    Референцията на поръчката, напр. ORD-AB12CD34EF.

Примерно повикване

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"]

Отговори

  • 200 — Платено извън доставчика (банков превод, в брой).
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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 #

Пълно или частично възстановяване.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • id string · в пътя · задължителен

    Референцията на поръчката, напр. ORD-AB12CD34EF.

Примерно повикване

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"]

Отговори

  • 201 — Пълно или частично възстановяване.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Няма (повече) какво да бъде възстановено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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} #

Симулираната страница за плащане на sandbox.

Нужно право: Не е нужен ключ

Параметри

  • reference string · в пътя · задължителен

    Референцията на поръчката, напр. ORD-AB12CD34EF.

  • signature string · в адреса · по избор

    Подписът от връзката; не го променяйте.

  • expires integer · в адреса · по избор

    Кога изтича връзката, като времеви отпечатък.

  • return_url string · в адреса · по избор

    Къде отива купувачът след приключване.

Примерно повикване

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"]

Отговори

  • 200 — Симулираната страница за плащане на sandbox.
  • 302 — Обратно към return_url на интеграцията.
  • 403 — Тази връзка не е валидна или е изтекла.
  • 404 — Не е намерено.

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

Приключване на симулираното плащане.

Нужно право: Не е нужен ключ

Параметри

  • reference string · в пътя · задължителен

    Референцията на поръчката, напр. ORD-AB12CD34EF.

  • signature string · в адреса · по избор

    Подписът от връзката; не го променяйте.

  • expires integer · в адреса · по избор

    Кога изтича връзката, като времеви отпечатък.

  • return_url string · в адреса · по избор

    Къде отива купувачът след приключване.

Примерно повикване

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"]

Отговори

  • 200 — Приключване на симулираното плащане.
  • 302 — Обратно към return_url на интеграцията.
  • 403 — Тази връзка не е валидна или е изтекла.
  • 404 — Не е намерено.

Билети

Извличане, анулиране и повторно изпращане на билети.

GET /api/v1/tickets #

Билетите, с филтри за списъка на входа.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, valid_on, -valid_on, used_at, -used_at, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • filter[valid_on] string · в адреса · по избор

    Филтър по valid_on.

  • filter[product_id] string · в адреса · по избор

    Филтър по product_id.

  • filter[order] string · в адреса · по избор

    Филтър по order.

  • filter[from] string · в адреса · по избор

    Филтър по from.

  • filter[to] string · в адреса · по избор

    Филтър по to.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Билетите, с филтри за списъка на входа.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "data": [
        {
            "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"
        }
    ],
    "meta": {
        "next_cursor": "string"
    }
}

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

Един билет.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • uuid string · в пътя · задължителен

    UUID на билета.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Един билет.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "data": {
        "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"
    }
}

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

Подписана връзка към pdf файла с билетите.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • uuid string · в пътя · задължителен

    UUID на билета.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Подписана връзка към pdf файла с билетите.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Повторно изпращане на имейла за потвърждение.

Нужно право: write

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • uuid string · в пътя · задължителен

    UUID на билета.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Повторно изпращане на имейла за потвърждение.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Анулиране на билета.

Нужно право: write

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • uuid string · в пътя · задължителен

    UUID на билета.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Анулиране на билета.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "data": {
        "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"
    }
}

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

Подписани връзки към wallet картите.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • uuid string · в пътя · задължителен

    UUID на билета.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Подписани връзки към wallet картите.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

Вход

Чекиране на входа.

GET /api/v1/check-ins #

Чекиранията на входа.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: scanned_at, -scanned_at, created_at, -created_at, id, -id

  • filter[result] string · в адреса · по избор

    Филтър по result.

  • filter[from] string · в адреса · по избор

    Филтър по from.

  • filter[to] string · в адреса · по избор

    Филтър по to.

  • filter[ticket] string · в адреса · по избор

    Филтър по ticket.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Чекиранията на входа.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

POST /api/v1/check-ins #

Пускане на посетител.

Нужно право: write

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

Примерно повикване

curl

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

PHP

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

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

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

JavaScript

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

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

Python

import uuid

import requests

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

Отговори

  • 201 — Пускане на посетител.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Този код вече е сканиран.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Отмяна на чекиране.

Нужно право: write

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • Idempotency-Key string · като заглавка · по избор

    Повтаряйте заявка безопасно: същият ключ със същото съдържание дава същия отговор.

  • id integer · в пътя · задължителен

    Идентификаторът на чекирането.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Отмяна на чекиране.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Поръчката не е в състояние, в което това е възможно.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

Клиенти

Купувачи, обобщени от поръчките.

GET /api/v1/customers #

Купувачите, обобщени по имейл адрес.

Нужно право: read

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: last_order_at, -last_order_at

  • filter[email] string · в адреса · по избор

    Филтър по email.

  • filter[search] string · в адреса · по избор

    Филтър по search.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Купувачите, обобщени по имейл адрес.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Поръчките на един имейл адрес.

Нужно право: read

Параметри

  • email string · в пътя · задължителен

    Имейл адресът на купувача, url кодиран.

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, paid_at, -paid_at, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • include string · в адреса · по избор

    Включете тези връзки: lines, tickets, payments, refunds.

    Стойности: lines, tickets, payments, refunds

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Поръчките на един имейл адрес.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "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"
    }
}

Мета

Описанието на самото API.

GET /api/v1/openapi.json #

Описанието на това API.

Нужно право: Не е нужен ключ

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Описанието на това API.

Примерен отговор

{}

Уебхук

Съобщения, които изпращаме към вашия сървър.

GET /api/v1/webhook-deliveries #

Дневникът на доставките от последните тридесет дни.

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, id, -id

  • filter[endpoint] string · в адреса · по избор

    Филтър по endpoint.

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • filter[event] string · в адреса · по избор

    Филтър по event.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Дневникът на доставките от последните тридесет дни.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Една доставка.

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на доставката.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Една доставка.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Този Idempotency-Key вече е използван за друга заявка.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Подайте отново неуспешна доставка.

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на доставката.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 202 — Подайте отново неуспешна доставка.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Този Idempotency-Key вече е използван за друга заявка.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

GET /api/v1/webhook-endpoints #

Дестинациите, на които получавате известия.

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • page[size] integer · в адреса · по избор

    Брой на страница, най-много 100.

  • page[cursor] string · в адреса · по избор

    Стойността next_cursor от предишната страница.

  • sort string · в адреса · по избор

    Сортиране; тире отпред обръща реда.

    Стойности: created_at, -created_at, id, -id

  • filter[status] string · в адреса · по избор

    Филтър по status.

  • filter[sandbox] string · в адреса · по избор

    Филтър по sandbox.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Дестинациите, на които получавате известия.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

POST /api/v1/webhook-endpoints #

Създайте дестинация; тайната се връща само веднъж.

Нужно право: webhooks

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

Примерно повикване

curl

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

PHP

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

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

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

JavaScript

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

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

Python

import uuid

import requests

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

Отговори

  • 201 — Създайте дестинация; тайната се връща само веднъж.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 409 — Този Idempotency-Key вече е използван за друга заявка.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Една дестинация.

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на дестинацията.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Една дестинация.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Този Idempotency-Key вече е използван за друга заявка.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Променете дестинация.

Нужно право: webhooks

Това повикване изпраща тяло на заявката.

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на дестинацията.

Примерно повикване

curl

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

PHP

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

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

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

JavaScript

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

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

Python

import uuid

import requests

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

Отговори

  • 200 — Променете дестинация.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Този Idempotency-Key вече е използван за друга заявка.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Изтрийте дестинация заедно с дневника на доставките ѝ.

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на дестинацията.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 204 — Изтрийте дестинация заедно с дневника на доставките ѝ.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

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

Издайте нова тайна; старата спира да работи веднага.

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на дестинацията.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Издайте нова тайна; старата спира да работи веднага.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Този Idempotency-Key вече е използван за друга заявка.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Подписан пример, с който да тествате собствената си проверка.

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на дестинацията.

  • event string · в адреса · по избор

    Кое събитие имитира примерът; по подразбиране test.ping.

    Стойности: order.created, order.paid, order.cancelled, order.refunded, ticket.issued, ticket.scanned, ticket.voided, slot.sold_out, slot.reopened, voucher.issued, voucher.redeemed, pass.issued, pos.session_closed, invoice.issued, test.ping

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 200 — Подписан пример, с който да тествате собствената си проверка.
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Този Idempotency-Key вече е използван за друга заявка.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

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

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

Изпратете пробно съобщение (test.ping).

Нужно право: webhooks

Параметри

  • Accept-Language string · като заглавка · по избор

    Езикът на преведените полета, с резервен вариант езика на организацията.

  • id integer · в пътя · задължителен

    Идентификаторът на дестинацията.

Примерно повикване

curl

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

PHP

use Illuminate\Support\Facades\Http;

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

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

JavaScript

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

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

Python

import requests

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

Отговори

  • 202 — Изпратете пробно съобщение (test.ping).
  • 401 — Този ключ не е валиден.
  • 403 — Този ключ няма право за това.
  • 404 — Не е намерено.
  • 409 — Този Idempotency-Key вече е използван за друга заявка.
  • 422 — Заявката не е правилна.
  • 429 — Твърде много заявки. Опитайте отново след 60 секунди.

Примерен отговор

{
    "data": {
        "endpoint_id": 1,
        "event": "string",
        "delivery_id": 1,
        "event_id": "string"
    }
}