Proof of Attendance Protocol — issue collectible badges (NFTs on Gnosis Chain) that record participation in events, online communities, and IRL gatherings.
- 01event attendance badges
- 02community participation proofs
- 03IRL token-gated experiences
- 04loyalty + collector flywheels
- 05lightweight onchain credentialing
- pnpm add @poap-xyz/drops @poap-xyz/poaps @poap-xyz/utils
| Variable | Scope | Description |
|---|---|---|
| POAP_API_KEY | Server | POAP API key (X-API-Key header) issued via the developer portal. |
| POAP_CLIENT_ID | Server | OAuth client ID for the POAP authentication service. |
| POAP_CLIENT_SECRET | Server | OAuth client secret used to mint access tokens. |
Use POAP to issue attendance badges. (1) Get an access token: `POST https://auth.accounts.poap.xyz/oauth/token` with `{ audience, grant_type: 'client_credentials', client_id, client_secret }` — token is valid 24h. (2) Create a drop: `POST https://api.poap.tech/events` with event metadata + a 6-digit `secret_code` (store it!). (3) Wait for Curation Body approval. (4) Mint links: `POST https://api.poap.tech/event/{id}/qr-codes` with `event_id` and `secret_code`. All requests require headers `Authorization: Bearer <token>` and `X-API-Key: $POAP_API_KEY`. The official SDK is `@poap-xyz/drops` / `@poap-xyz/poaps`.
- ⚑Every drop goes through the POAP Curation Body — expect 24–72h review; reapplications need iteration on artwork and metadata.
- ⚑Access tokens expire after 24 hours — implement refresh logic or you'll see silent 401s in production.
- ⚑POAPs are minted on Gnosis Chain (xDai) — bridging to mainnet/L2 requires the POAP bridge and isn't instant.
- ⚑`secret_code` is unrecoverable if lost — store it in your secret manager at creation time.
- ⚑Rate limits apply per API key (default ~100 req/min); high-volume mints should batch QR/mint-link generation.
- ⚑Anti-sybil: drops can require captcha and email confirmation but the default `mint links` flow is link-shareable — for high-value drops, use POAP Mint Links with secret-protected claims or short TTL.