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
| Scope | Description |
|---|---|
read:meetpass | List passes, view pass details, list connections |
write:meetpass | Update 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-..."
| Field | Type | Description |
|---|---|---|
label | string | Display name (max 100 chars) |
action | string | "profile" or "link:{url}" where URL is from your social links |
autoFollow | boolean | Whether 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
| Type | Description |
|---|---|
nfc | Physical NFC tag. Claimed by tapping. Can be released and re-claimed. |
qrcode | Virtual QR code pass. Auto-provisioned per user. Cannot be released. |
Pass Actions
| Action | Behavior |
|---|---|
profile | Redirects 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.