> ## Documentation Index
> Fetch the complete documentation index at: https://developers.bm.cards/llms.txt
> Use this file to discover all available pages before exploring further.

# Issue a wallet card

> Creates a wallet pass for a cardholder in the specified program. Send contact fields in `person` and card data in `passdata`. If the cardholder does not exist yet, they are created automatically. You do not need a separate person-create call. Store your external member key in `passdata.metaData` and reuse it as `unique_id` on later lookups.



## OpenAPI

````yaml /openapi/brand-api.json post /{brand_id}/programs/{program_id}/issue-wallet
openapi: 3.0.0
info:
  title: Bambu Brand API
  description: >-
    Partner APIs for issuing and managing wallet cards, activations,
    transactions, SMS, and program configuration. Start with the Guides tab for
    authentication and your first issue-wallet call.
  version: 1.0.0
servers:
  - url: https://api.bambumeta.software/brands
    description: Production
  - url: https://api-sandbox.bambumeta.software/brands
    description: Sandbox
security: []
tags:
  - name: brand
    description: Brand setup and configuration
  - name: brand-activation
    description: Onboarding activations and issue-wallet for an activation
  - name: brands
    description: Custom brand attribute fields
  - name: link-activation
    description: Distribution link activation CRUD
  - name: onboarding
    description: >-
      Program onboarding metrics (internal tag, grouped under reporting in the
      portal)
  - name: program
    description: Program setup and transactions
  - name: reporting
    description: Pass and stage breakdown reports
  - name: sms
    description: Send outbound SMS messages
  - name: subscription
    description: SMS subscription enrollment and stage updates
  - name: template
    description: Wallet template management
  - name: transactions
    description: Transaction types, records, and program transactions
  - name: wallet
    description: Issue, retrieve, update, and delete wallet cards
  - name: wallet-bulk
    description: Bulk pass updates and scheduled changes
  - name: workflow
    description: Trigger workflows that issue or update passes
paths:
  /{brand_id}/programs/{program_id}/issue-wallet:
    post:
      tags:
        - wallet
      summary: Issue a wallet card
      description: >-
        Creates a wallet pass for a cardholder in the specified program. Send
        contact fields in `person` and card data in `passdata`. If the
        cardholder does not exist yet, they are created automatically. You do
        not need a separate person-create call. Store your external member key
        in `passdata.metaData` and reuse it as `unique_id` on later lookups.
      parameters:
        - name: brand_id
          in: path
          description: Brand Identifier
          required: true
          style: simple
          explode: false
          schema:
            type: string
          example: '353'
        - name: program_id
          in: path
          description: Program Identifier
          required: true
          style: simple
          explode: false
          schema:
            type: string
          example: '1396'
      requestBody:
        description: Person and wallet card data for the new pass
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/WalletInput'
                - type: object
                  properties:
                    smsOptInStatus:
                      type: number
                      description: >-
                        Subscribe to SMS, 200 to PROMOTIONAL, 300 to
                        TRANSACTIONAL, 900 to OPTED_OUT
            example:
              person:
                firstName: Alex
                lastName: Member
                email: member@example.com
                phone: '+15551234567'
              passdata:
                points: 0
                metaData:
                  memberId: '1001'
      responses:
        '200':
          description: Wallet pass created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletPass'
              example:
                passId: 12345
                serialNumber: 88faf0d9-196c-11f1-99ef-0e0d839580d9
                templateId: 100
                personId: 550e8400-e29b-41d4-a716-446655440000
                passdata:
                  points: 0
                  metaData:
                    memberId: '1001'
                downloadUrl: >-
                  https://wallet-pass.bambumeta.software/brand/353/88faf0d9-196c-11f1-99ef-0e0d839580d9
                downloadUrlApple: >-
                  https://wallet-pass.bambumeta.software/brand/353/88faf0d9-196c-11f1-99ef-0e0d839580d9
                downloadUrlGoogle: https://pay.google.com/gp/v/save/eyJhbGciOiJFUzI1NiJ9...
                statusCode: ACTIVE
                status: 200
        '400':
          description: Error Occurred
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Applicable Error Message
              example:
                message: >-
                  Validation failed. Check required fields and unique identifier
                  rules.
      security:
        - cognito-authorizer:
            - https://admin.bambumeta.software/ui
components:
  schemas:
    WalletInput:
      type: object
      properties:
        person:
          $ref: '#/components/schemas/PersonInput'
        geoLocation:
          $ref: '#/components/schemas/GeoLocation'
        ipAddress:
          type: string
          description: IP Address
        templateTierId:
          type: number
          description: The  wallet pass tier identifier.
        templateId:
          type: number
          description: The  wallet pass template identifier
        programId:
          type: number
          description: The  wallet pass program identifier
        brandId:
          type: number
          description: The  wallet pass brand identifier
        groupId:
          type: string
          description: >-
            If provided, this group identifier will be used to group the wallet
            passes together.
        currentMessage:
          type: string
          description: >-
            If provided, the current message for the wallet pass overriding the
            default message.
        passdata:
          $ref: '#/components/schemas/PassData'
    WalletPass:
      type: object
      required:
        - serialNumber
        - templateId
      properties:
        passId:
          type: number
        serialNumber:
          type: string
        templateId:
          type: number
        groupId:
          type: string
          description: >-
            If provided, this group identifier will be used to group the wallet
            passes together.
        personId:
          type: string
        templateTierId:
          type: number
          description: >-
            The optional wallet pass tier identifier for updating the tier on
            the wallet card.
        currentMessage:
          type: string
          description: The current message for the wallet pass
        passdata:
          $ref: '#/components/schemas/PassData'
        downloadUrl:
          type: string
          description: The download url for the pass
        downloadUrlApple:
          type: string
          description: The download url for the pass for Apple Wallet
        downloadUrlGoogle:
          type: string
          description: The download url for the pass for Google Wallet
        statusCode:
          type: string
          description: The status for the pass
        status:
          type: number
          description: The numeric representation of the status
    PersonInput:
      type: object
      properties:
        firstName:
          type: string
          description: The first name of the person for the account.
        lastName:
          type: string
          description: The last name of the person for the account.
        email:
          type: string
          description: >-
            The email address of the owner of the account, may be used as a
            unique identifier
        phone:
          type: string
          description: >-
            The phone number of the owner of the account, should contain
            +<country code> for sms purposes
        metadata:
          type: object
          description: Any additional metadata to be stored against the person record.
    GeoLocation:
      type: object
      properties:
        latitude:
          type: number
          description: Latitude
        longitude:
          type: number
          description: Longitude
    PassData:
      type: object
      properties:
        optOut:
          type: boolean
        points:
          type: number
        seat:
          type: string
        row:
          type: string
        section:
          type: string
        gate:
          type: string
        expiryDate:
          type: string
        status:
          type: string
        profileImage:
          type: string
        metaData:
          type: object
          additionalProperties: true
  securitySchemes:
    cognito-authorizer:
      type: apiKey
      name: Authorization
      in: header

````