API · open protocol · v1

An open protocol
for scanning
Praticable tickets.

Integrate access control into your own infrastructure with a simple, documented, and free REST API for all Praticable organisers.

POST · /api/v1/tickets/check-in 200 OK · 84 ms
curl -X POST "https://tickets.example.com/api/v1/tickets/check-in" \
  -H "Authorization: Bearer sk_live_01H..." \
  -d '{
    "tid": "01HXXX...ULID",
    "eid": "evt_01HXXX",
    "scanned_at": "2026-06-15T19:42:13Z",
    "scanner_id": "device-uuid",
    "gate_id": "north",
    "idempotency_key": "uuid-v4"
  }'

// → { "status": "valid", "ticket": { "holder_name": "Léa M.", ... } }

01 Why this protocol exists Short and honest

For teams
that already have
their own hardware.

Praticable Scan covers 90% of cases. But some venues already have turnstiles, NFC readers, kiosks or an integrated access control system. For them, we publish an open protocol: a REST API, documented, versioned, free.

No mandatory SDK, no imposed widget. You send an HTTP request, you receive a JSON response. That is all.


Stable

v1 frozen, deprecation announced 12 months in advance.

Documented

OpenAPI 3.1, examples by language.

Free

No cost for Praticable organisers.


02 What you can build Six typical use cases

Your integrations, your infrastructure, your hardware.

01

Hardware scanners

Connect your existing barcode readers, scanners or terminals via the REST API.

02

Self-service kiosks

Validate tickets from interactive terminals at the venue entrance.

03

Access control

Turnstiles, badges, Inepro/Sirius integrations and physical systems.

04

Custom NFC readers

Subscriptions, RFID, membership cards and contactless access control.

05

Event webhooks

Receive scan, sale and refund notifications in real time.

06

POS integrations

Bar, catering linked to access rights and ticketing.


03 The full flow Discovery → enrollment → check-in

From setup QR to check-in, three steps.

01 · Issuer discovery GET · /.well-known/ticket-issuer.json
curl "https://tickets.example.com/.well-known/ticket-issuer.json"

// → {
  "protocol_version": 1,
  "issuer": "https://tickets.example.com",
  "name": "Festival des Arts",
  "keys": [{
    "kid": "a1b2c3d4",
    "alg": "Ed25519",
    "public_key": "base64url..."
  }]
}
02 · Scanner enrollment POST · /api/v1/scanners/enroll
curl -X POST "https://tickets.example.com/api/v1/scanners/enroll" \
  -d '{
    "token": "st_01HXXX...enrollment-token",
    "scanner_id": "device-uuid",
    "scanner_name": "iPhone 14 - Entrée Nord"
  }'

// → { "api_key": "sk_live_01H...", "scope": { "eid": "evt_..." } }
03 · Ticket check-in POST · /api/v1/tickets/check-in
curl -X POST "https://tickets.example.com/api/v1/tickets/check-in" \
  -H "Authorization: Bearer sk_live_01H..." \
  -d '{
    "tid": "01HXXX...ULID",
    "eid": "evt_01HXXX",
    "scanned_at": "2026-06-15T19:42:13Z",
    "scanner_id": "device-uuid",
    "gate_id": "north",
    "idempotency_key": "uuid-v4"
  }'

// → {
  "status": "valid",
  "ticket": {
    "tid": "01HXXX...ULID",
    "holder_name": "Léa Marchand",
    "ticket_type": "VIP",
    "checked_in_at": "2026-06-15T19:42:13Z"
  }
}

04 Resources Everything is public, everything is versioned

API documentation

praticable.eu/docs/api

Full reference, guides, examples by language and step-by-step tutorials.

Open →

OpenAPI spec

praticable.eu/openapi.yaml

OpenAPI 3.1 specification, import directly into Postman or your SDK generator.

Open →

Changelog · status

praticable.eu/en/status

Version history, real-time API status and past incidents.

Open →

05 Technical partnerships Direct contact

A question, a specific use case, a partnership?

For anything related to integration, the documentation covers most cases. If you are working on a technical partnership or an unusual use case, write to us directly.

developers@praticable.eu Write to the team →

06 Get started

Three steps is all it takes.
Start now.

The protocol is open and the documentation is public. Launch your first integration in minutes.