Skip to main content
Use this guide when your system enrolls or updates many cardholders at once, for example a nightly sync from your membership database or a roster import after an event.
For one-time migration of thousands of existing members, Bambu also supports CSV upload in the admin portal (Distribution → Upload CSV). Use the API flows below for ongoing batch operations from your own systems.

When to use which endpoint

Prerequisites

  1. Authenticate and obtain a Bearer token.
  2. Know your brand_id, program_id, and unique field name (for example memberId in passdata.metaData).
  3. See Unique identifier for how unique_id ties create and update together.

Scenario: enroll a batch of new members

Your registration system has a list of new members to receive wallet passes. Send them in one issue-wallets request.

Request

Response

Save passId, downloadUrlApple, and downloadUrlGoogle per member from the response. Distribute install links through your own email or SMS channel.

Tips

  • Keep batches at a size your job runner can retry (ask Bambu about rate limits for your tenant).
  • If one member already exists, behavior depends on brand rules. Design your job to log failures and continue.
  • Do not call POST /people first; each pass entry creates the cardholder when needed.

Scenario: update many cards with the same change

Your loyalty program needs to push the same message or points rule to every card in a tier, for example all Active members before an event.

Request

Use query parameters to filter which passes receive the change, and the body for what changes.
The response includes an updateId you can track:
Check job status with GET /{brand_id}/programs/{program_id}/bulk-wallets.

Tips

  • Test filters on a small segment in sandbox before running against production.
  • Bulk update applies the same payload to all matching cards. It is not for per-member field differences.
  • For different data per member, loop PATCH .../wallets?unique_id= instead.

Scenario: different updates per member in one job

When each cardholder needs different field values (names, points, metadata), run a server-side job that calls the single-card endpoint once per member:
Repeat for unique_id=1002, 1003, and so on. This pattern is simple to retry per row and maps cleanly to CSV or database exports.

End-to-end flow

  • API Reference → Authentication: same OAuth flow, linked from the endpoint playground
  • API Reference → Wallet cards → POST /{brand_id}/issue-wallets
  • API Reference → Bulk & scheduled updates → PATCH /{brand_id}/programs/{program_id}/bulk-wallets