Skip to main content
Issue a card with POST /cards/users/{userId}/issue. The cardType field determines virtual or physical delivery. End users can hold multiple virtual and/or physical cards. Your business account is limited to 50 non-canceled cards in total, and 50 card creations every 90 days.

Virtual card

Virtual cards do not use courier shipping. They do require a residential physicalAddress:
  • Send physicalAddress on the issue request, or
  • Ensure the user already has a stored physicalAddress (from POST /users, PATCH /users/{userId}, or a prior physical issue)
If neither is present, the API returns 400.
Issue virtual card (address on request)
Issue virtual card (user already has stored physicalAddress)
When you send physicalAddress on issue, it is upserted on the user and synced to the issuer. It is not sent as Rain card shipping. Virtual and physical cards are issued as active. No separate activate step is required. For dual card branding, see Business account.

physicalAddress fields

Physical card

Requires a shippingAddress object on the issue request (courier delivery + recipient phone). Issuing a physical card also upserts users.physicalAddress from the shipping fields (phone is dropped). Call GET /cards/fees first to read the once-off physical card fee (physicalCardFee in USDC cents). If it is greater than zero, send acceptCharge: true when issuing — otherwise the API returns a 400 with the charge amount. You also need enough treasury USDC to cover the fee.
GET /cards/fees
Card fees response
physicalCardFee is in USDC cents (1000 = 10.00 USDC). When it is 0, acceptCharge is not required.
Issue physical card
To group cards into one bulk shipment, send the address id as bulkShippingGroupId from Bulk shipping addresses (for example GET /cards/bulk-shipping-addresses/default). The issue call does not apply a default for you. Omit the field to ship that card individually.

shippingAddress fields

Physical cards are issued as active. Set the PIN with Managing a card’s PIN after issuance. To permanently end a card, use DELETE /cards/{cardId}. See Lifecycle controls. For a compromised virtual card, see Replace a card.