← Back to Developer Portal

API Documentation

Everything you need to integrate with the Tampa.dev platform.

MeetPass

MeetPass lets users connect in person via NFC tags and QR codes. Every user gets a QR code pass automatically. NFC passes are claimed by tapping physical tags.

Scopes

ScopeDescription
read:meetpassList passes, view pass details, list connections
write:meetpassUpdate pass settings, release NFC passes

GET /v1/meetpass

List your passes. Auto-provisions a QR code pass if you don't have one yet.

Scope: read:meetpass

curl -H "Authorization: Bearer td_pat_abc123..." \
  "https://api.tampa.dev/v1/meetpass"
{
  "data": {
    "passes": [
      {
        "id": "a1b2c3d4-...",
        "type": "qrcode",
        "label": null,
        "designId": null,
        "action": "profile",
        "autoFollow": 1,
        "isActive": 1,
        "claimedAt": "2026-03-01T12:00:00.000Z",
        "createdAt": "2026-03-01T12:00:00.000Z",
        "design": null
      },
      {
        "id": "e5f6a7b8-...",
        "type": "nfc",
        "label": "My Keychain",
        "designId": "classic",
        "action": "profile",
        "autoFollow": 1,
        "isActive": 1,
        "claimedAt": "2026-03-01T12:00:00.000Z",
        "createdAt": "2026-03-01T12:00:00.000Z",
        "design": {
          "name": "Classic",
          "imageUrl": "https://td-uploads-public.tampa.dev/meetpass/images/classic.png",
          "modelUrl": "https://td-uploads-public.tampa.dev/meetpass/models/tdevs-keychain-classic.glb",
          "themeColor": "#E8573A"
        }
      }
    ],
    "totalConnections": 42
  }
}

Each pass includes a design object when a design is assigned (designId is not null), or null when no design exists. The design object contains the design's display name, image URL, 3D model URL, and theme color.

GET /v1/meetpass/qr

Get your QR code pass. Auto-provisions one if it doesn't exist. Returns the pass data plus connection count.

Scope: read:meetpass

curl -H "Authorization: Bearer td_pat_abc123..." \
  "https://api.tampa.dev/v1/meetpass/qr"
{
  "data": {
    "id": "a1b2c3d4-...",
    "type": "qrcode",
    "label": null,
    "action": "profile",
    "autoFollow": 1,
    "isActive": 1,
    "claimedAt": "2026-03-01T12:00:00.000Z",
    "connectionCount": 15
  }
}

Use the pass id to construct the QR code URL: https://tampa.dev/pass/{id}

GET /v1/meetpass/:id

Get details for a specific pass you own.

Scope: read:meetpass

curl -H "Authorization: Bearer td_pat_abc123..." \
  "https://api.tampa.dev/v1/meetpass/a1b2c3d4-..."
{
  "data": {
    "id": "a1b2c3d4-...",
    "type": "nfc",
    "label": "My Keychain",
    "designId": "classic",
    "action": "profile",
    "autoFollow": 1,
    "isActive": 1,
    "claimedAt": "2026-03-01T12:00:00.000Z",
    "design": {
      "id": "classic",
      "name": "Classic",
      "themeColor": "#E8573A",
      "imageUrl": "https://td-uploads-public.tampa.dev/meetpass/images/classic.png",
      "modelUrl": "https://td-uploads-public.tampa.dev/meetpass/models/tdevs-keychain-classic.glb"
    },
    "connectionCount": 8
  }
}

Returns 403 if the pass belongs to another user, 404 if it doesn't exist.

PATCH /v1/meetpass/:id

Update pass settings. Works for both NFC and QR passes.

Scope: write:meetpass

curl -X PATCH \
  -H "Authorization: Bearer td_pat_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"label": "My Lanyard", "autoFollow": false}' \
  "https://api.tampa.dev/v1/meetpass/a1b2c3d4-..."
FieldTypeDescription
labelstringDisplay name (max 100 chars)
actionstring"profile" or "link:{url}" where URL is from your social links
autoFollowbooleanWhether visitors auto-follow you on tap

DELETE /v1/meetpass/:id

Release an NFC pass. Resets it to unclaimed so anyone can claim it.

Scope: write:meetpass

curl -X DELETE \
  -H "Authorization: Bearer td_pat_abc123..." \
  "https://api.tampa.dev/v1/meetpass/a1b2c3d4-..."

Returns 400 for QR code passes (they cannot be released). Returns 403 if you don't own the pass.

GET /v1/meetpass/connections

Your connection rolodex. Paginated list of people who tapped or scanned your passes.

Scope: read:meetpass

curl -H "Authorization: Bearer td_pat_abc123..." \
  "https://api.tampa.dev/v1/meetpass/connections?limit=20&offset=0"
{
  "data": [
    {
      "id": "conn-uuid",
      "visitorUserId": "user-uuid",
      "visitorAnonId": null,
      "createdAt": "2026-03-08T14:00:00.000Z",
      "visitorName": "Jane Doe",
      "visitorUsername": "janedoe",
      "visitorAvatarUrl": "https://cdn.tampa.dev/avatars/jane.jpg"
    },
    {
      "id": "conn-uuid-2",
      "visitorUserId": null,
      "visitorAnonId": "anon-uuid",
      "createdAt": "2026-03-07T10:00:00.000Z",
      "visitorName": null,
      "visitorUsername": null,
      "visitorAvatarUrl": null
    }
  ],
  "pagination": {
    "total": 42,
    "limit": 20,
    "offset": 0,
    "hasMore": true
  }
}

Connections are scoped to you as the pass owner. Anonymous visitors appear with visitorUserId: null and a visitorAnonId.

Pass Types

TypeDescription
nfcPhysical NFC tag. Claimed by tapping. Can be released and re-claimed.
qrcodeVirtual QR code pass. Auto-provisioned per user. Cannot be released.

Pass Actions

ActionBehavior
profileRedirects visitors to your profile page
link:{url}Redirects to a URL from your social links

The link:{url} action only accepts URLs that exist in your profile's social links. This prevents open redirect abuse.