API Documentation

Integrate PassQR into your application. All endpoints are available at https://passqr.com

Validate Pass

Validate a pass by its QR code. Increments usage count on successful validation.

POST/api/validate
GET/api/validate?code=PASS-ABC12345

Responses

validPass is valid, access granted
expiredPass has expired
usedPass already used (max uses reached)
revokedPass has been revoked
not_foundNo pass matches the given code
bash
curl -X POST https://passqr.com/api/validate \
  -H "Content-Type: application/json" \
  -d '{"code": "PASS-ABC12345"}'

Example Response

json
{
  "valid": true,
  "status": "valid",
  "message": "✅ Access granted",
  "pass": {
    "code": "PASS-ABC12345",
    "holderName": "John Doe",
    "holderEmail": "john@example.com",
    "templateName": "VIP Membership",
    "templateType": "membership",
    "usesCount": 1,
    "maxUses": null,
    "scansRemaining": null
  },
  "timestamp": "2026-01-15T10:30:00.000Z"
}

Apple Wallet

Generate and download an Apple Wallet (.pkpass) file for a pass. Requires Starter or Pro plan.

GET/api/wallet/apple?code=PASS-ABC12345

Responses

200Returns .pkpass file for download
403Premium feature — upgrade required
404Pass not found
bash
curl -o pass.pkpass "https://passqr.com/api/wallet/apple?code=PASS-ABC12345"

Google Wallet

Get a Google Wallet save link for a pass. Requires Starter or Pro plan. Full JWT-based integration coming soon.

GET/api/wallet/google?code=PASS-ABC12345

Responses

200Returns HTML page with save instructions
403Premium feature — upgrade required
404Pass not found
bash
curl "https://passqr.com/api/wallet/google?code=PASS-ABC12345"

Bulk Create Passes

Create multiple passes at once for a template. Max 100 passes per request. Requires authentication.

POST/api/passes/bulk

Responses

200Returns array of created pass codes
400Invalid input or limit exceeded
401Unauthorized
bash
curl -X POST https://passqr.com/api/passes/bulk \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "template_id": "uuid-here",
    "passes": [
      { "holder_name": "Alice", "holder_email": "alice@example.com" },
      { "holder_name": "Bob", "holder_email": "bob@example.com", "max_uses": 3 }
    ]
  }'

Example Response

json
{
  "created": [
    { "id": "uuid", "code": "PASS-A1B2C3D4", "holder_name": "Alice", "holder_email": "alice@example.com" },
    { "id": "uuid", "code": "PASS-E5F6G7H8", "holder_name": "Bob", "holder_email": "bob@example.com" }
  ],
  "count": 2
}

Email Pass

Send a pass link via email to the holder. Includes QR code and wallet download links.

POST/api/passes/email
POST/api/passes/email

Responses

200Emails sent successfully
400No email address on pass
401Unauthorized
bash
curl -X POST https://passqr.com/api/passes/email \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"pass_id": "uuid-here"}'

Webhooks

Receive real-time notifications when passes are scanned. Set your webhook URL in dashboard settings.

POSTYOUR_WEBHOOK_URL (configured in settings)
bash
# Example webhook payload sent to your server:
# POST https://your-server.com/webhook
# Content-Type: application/json
#
# {
#   "event": "scan",
#   "pass": {
#     "code": "PASS-ABC12345",
#     "holder": "John Doe",
#     "template": "VIP Membership",
#     "status": "active"
#   },
#   "result": "valid",
#   "timestamp": "2026-01-15T10:30:00.000Z"
# }

Example Response

json
{
  "event": "scan",
  "pass": {
    "code": "PASS-ABC12345",
    "holder": "John Doe",
    "template": "VIP Membership",
    "status": "active"
  },
  "result": "valid",
  "timestamp": "2026-01-15T10:30:00.000Z"
}