99.99%
Uptime
< 45ms
Avg Latency
Sandbox Mode

MagicTix API v2.4

Build ticketing, wristband, and event management integrations for fairs, carnivals, and live events. Authenticate, query events, process wristband payments, and track gate activity in real time.

Base URL https://api.magictix.com/v2/
Quick Start
cURL
curl -X GET https://api.magictix.com/v2/events \ -H "Authorization: Bearer mt_live_xxxxx" \ -H "Content-Type: application/json"
Response
JSON · 200 OK
{ "events": [{ "id": "evt_osf2026", "name": "Ohio State Fair 2026", "dates": { "start": "2026-07-23", "end": "2026-08-03" }, "location": { "city": "Columbus", "state": "OH" }, "status": "active", "stats": { "tickets_sold": 42800, "revenue": 1240000 } }] }

RESTful API

Standard REST with JSON payloads. Predictable resource URLs, HTTP verbs, and status codes for events, tickets, wristbands, vendors, and gates.

Real-time Webhooks

Subscribe to ticket scans, wristband top-ups, gate entries, and payment events. Receive instant POST notifications with HMAC verification.

SDK Libraries

Official client libraries for Node.js, Python, C#, Go, and Swift. Type-safe models, automatic retries, and built-in pagination helpers.

Authentication

All API requests require a Bearer token in the Authorization header. MagicTix uses key-prefixed tokens to distinguish environments.

API Key Types

mt_live_*
Production key. Processes real transactions, charges wristbands, issues tickets.
mt_test_*
Sandbox key. Simulated data, no real charges. Use for development and testing.
Example Request
HTTP
GET /v2/events HTTP/1.1 Host: api.magictix.com Authorization: Bearer mt_live_sk_4f8b2c1d9e7a... Content-Type: application/json X-API-Version: 2026-01-01

Security Best Practices

Never expose live keys in client-side code. Use test keys during development. Rotate keys every 90 days. Enable IP allowlists in your dashboard for production keys.

Error Responses

JSON · 401 Unauthorized
{ "error": { "code": "auth_invalid_key", "message": "The API key provided is invalid or expired.", "doc_url": "https://docs.magictix.com/errors/auth_invalid_key" } }

Webhooks

Receive real-time event notifications via HTTP POST to your endpoint.

Available Events

ticket.purchased
Ticket bought at kiosk or online
ticket.scanned
Ticket QR validated at gate
wristband.topped_up
Funds added to RFID wristband
wristband.payment
Wristband used for vendor purchase
gate.entry
Guest scanned in through gate
gate.exit
Guest exited through gate
alert.triggered
Capacity or security alert fired

Configuration

Recent Deliveries
TimestampEventStatusLatency
2026-02-12 14:32:08ticket.purchased20042ms
2026-02-12 14:31:55gate.entry20038ms
2026-02-12 14:31:22wristband.topped_up20051ms
2026-02-12 14:30:48wristband.payment5002340ms
2026-02-12 14:30:11ticket.scanned20035ms
2026-02-12 14:29:44gate.entry20040ms

SDK Libraries

Official client libraries with type-safe models and built-in retry logic.

Node.js

npm i @magictix/sdk
🐍

Python

pip install magictix

C# / .NET

dotnet add MagicTix.SDK

Go

go get magictix.com/sdk
🐦

Swift

MagicTixSDK (SPM)

Java / Kotlin

com.magictix:sdk:2.4
Quick Example — Node.js
JavaScript
import { MagicTix } from '@magictix/sdk'; const mt = new MagicTix('mt_live_sk_4f8b2c...'); // List active events const events = await mt.events.list({ status: 'active' }); // Top up a wristband const topup = await mt.wristbands.topUp('wrb_a1b2c3', { amount: 2500, currency: 'usd' }); console.log(`Wristband balance: $${topup.new_balance / 100}`);

API Sandbox

Test endpoints with pre-built examples or craft custom requests.

Request

Response

200 OK 42ms 1.2 KB
{ "events": [ { "id": "evt_osf2026", "name": "Ohio State Fair 2026", "dates": { "start": "2026-07-23", "end": "2026-08-03" }, "location": { "city": "Columbus", "state": "OH" }, "status": "active", "rides": 48, "vendors": 124, "stats": { "tickets_sold": 42800, "wristbands_active": 18340, "revenue": 1240000 } }, { "id": "evt_midway2026", "name": "Midway Summer Carnival", "status": "upcoming" } ], "meta": { "total": 2, "page": 1 } }

Rate Limits

Requests are limited per API key. Exceeding limits returns 429 Too Many Requests.

EndpointTierRateBurst
GET /v2/eventsStandard1,000 req/min50 req/sec
POST /v2/ticketsStandard500 req/min25 req/sec
POST /v2/tickets/validateHigh2,000 req/min100 req/sec
GET /v2/wristbands/:id/balanceHigh2,000 req/min100 req/sec
POST /v2/wristbands/:id/topupStandard500 req/min25 req/sec
POST /v2/gates/scanCritical5,000 req/min200 req/sec
GET /v2/analytics/*Low100 req/min10 req/sec
GET /v2/vendorsStandard1,000 req/min50 req/sec
Rate Limit Headers
Response Headers
X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 847 X-RateLimit-Reset: 1720531200 Retry-After: 30 // only on 429 responses

Changelog

2026-02-10
New Wristband Top-Up Webhooks
Added wristband.topped_up webhook event. Fires when funds are added to any wristband at kiosks or through the mobile app. Includes new_balance and top_up_method fields.
2026-02-03
New Gate Scan Bulk Endpoint
New POST /v2/gates/scan/bulk endpoint for batch processing gate entries. Accepts up to 100 scans per request for high-throughput gates at major fairgrounds.
2026-01-20
Fix Analytics Revenue Timezone Handling
Fixed an issue where revenue analytics returned incorrect totals when the event timezone differed from UTC. All /v2/analytics/revenue responses now respect the event's configured timezone.
2026-01-10
Breaking V2 Authentication Format Change
API keys now use the mt_live_ and mt_test_ prefixes. Legacy mtx_ keys deprecated as of 2026-04-01. Migrate keys in your MagicTix Dashboard.
2025-12-15
New Vendor Management Endpoints
Full CRUD for vendor management: GET/POST/PUT/DELETE /v2/vendors. Assign vendors to events, manage booth locations, and track vendor sales in real time.
2025-12-01
New SDK v2.4 Release
Updated all SDK libraries (Node, Python, C#, Go, Swift) to v2.4. Added automatic pagination, retry with backoff, and typed webhook event models.