Dynamic Stores
Dynamic stores are serverless address lists hosted by BitBadges. You create a store, and BitBadges stores and manages the list for you. You add and remove addresses via API calls β from anywhere: your backend, a Zapier automation, an LLM agent, a cron job, or any system that can make HTTP requests. The store is then attached to claims as a gating mechanism.
The core idea: decouple eligibility management from claim configuration. Instead of hardcoding who can claim, maintain a living list that updates in real-time as your business logic dictates.
How It Works
Create a store in the developer portal β receive a store ID and secret
Add/remove addresses via API whenever your eligibility criteria change
Attach the store to one or more claims using the
whitelistpluginUsers claim β BitBadges checks if the user's address is in the store
Stores are reusable β attach one store to multiple claims. Update the store once, and all claims using it reflect the change.
Queue-Based Processing
Store actions (add/remove) are processed through a queue system. When you call the API, the action is queued and processed asynchronously. There may be a 1-2 second delay between when you trigger an action and when it's finalized in the store.
This means:
If you add an address and the user immediately tries to claim, the store may not have updated yet
For time-sensitive flows, build in a small buffer or retry logic on the user side
Batch actions are processed together, so they're consistent relative to each other
Creating a Store
Create stores in the developer portal. You receive:
Store ID (
dynamicDataId) β identifies the store in API calls and claim configurationStore secret (
dataSecret) β authenticates API requests (keep this secret on your backend)
Managing Entries
Via UI
Manage entries directly in the developer portal β add, remove, and view addresses.
Via API β Single Action
Via API β Batch Actions
API Payload Reference
Data Model
Authentication
Signed in as creator/manager: No
dataSecretneededAPI access: Include
dataSecretin the request bodyPublic stores: If
publicUseInClaimsis true, anyone can reference the store in claims, but management (add/remove) still requires authentication
Attaching to Claims
Use the whitelist plugin with dynamic store configuration:
Or use the claim builder UI: select your store from the templates section, or navigate to the store's page and click "Create Claim."
Integration Patterns
The API-driven design means you can trigger add/remove from any system that can make HTTP requests:
Backend webhook:
AI agent / LLM:
Zapier / no-code automation:
Use Zapier's webhook action to call the BitBadges API
Trigger from any Zapier-supported event (form submission, CRM update, calendar event, etc.)
No code required β just configure the HTTP request in Zapier
Cron job / scheduled task:
Custom plugin (success webhook): A custom plugin can add addresses to a store as a side effect of claim success β effectively chaining claims together.
Limitations
Off-chain stores can only be used in off-chain contexts (claims via the
whitelistplugin). They are not accessible on-chain.Only addresses are supported as identifiers (no emails, usernames, etc.)
Queue processing introduces a 1-2 second delay between API call and store update
On-Chain Dynamic Stores
BitBadges also supports on-chain dynamic stores β boolean address-value stores on the blockchain that integrate with approval criteria via DynamicStoreChallenge. These are separate from the off-chain stores described above and are managed via blockchain transactions, not the API. Similar concepts, just on vs off-chain.
See Dynamic Store Challenges and MsgCreateDynamicStore for full documentation.
Last updated