Card Issuance
Learn how to issue virtual cards for your business members using the Brighty B2B API.
Overview​
Brighty allows you to issue virtual cards for your business members instantly. This guide covers the complete card issuance workflow from account setup to card activation and management.
Prerequisites​
Before issuing cards, ensure you have:
- A verified business member in your system
- Valid API token with card issuance permissions
- At least one business account with sufficient balance for card fees
Card Issuance Workflow​
Step 1: Get or Create Account​
First, you need an account to link the card to for funding and fee payment.
Get Existing Accounts​
curl -X GET https://api.brighty.codes/business/v1/accounts \
-H "Authorization: Bearer ${BRIGHTY_API_TOKEN}" \
-H "Content-Type: application/json"
Response:
{
"accounts": [
{
"id": "acc_12345678-1234-1234-1234-123456789012",
"name": "Main Business Account",
"balance": {
"amount": "5000.00",
"currency": "USD"
},
"type": "CURRENT",
"openedAt": "2025-07-01T10:00:00Z"
}
]
}
Create New Account (if needed)​
curl -X POST https://api.brighty.codes/business/v1/accounts \
-H "Authorization: Bearer ${BRIGHTY_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"currency": "USD",
"name": "Card Funding Account",
"type": "CURRENT"
}'
Step 2: Get Available Card Designs​
Retrieve available card designs to choose from:
curl -X GET https://api.brighty.codes/business/v1/cards/designs \
-H "Authorization: Bearer ${BRIGHTY_API_TOKEN}"
Response:
{
"cardDesigns": [
{
"id": "design_12345678-1234-1234-1234-123456789012",
"code": "VIRTUAL_STANDARD",
"formFactor": "VIRTUAL",
"cardNetwork": "MASTERCARD",
"image": "https://assets.brighty.app/cards/virtual-standard.png",
"previewImage": "https://assets.brighty.app/cards/virtual-standard-preview.png",
"status": "AVAILABLE",
"backgroundColor": "#1e3a8a",
"foregroundPrimaryColor": "#ffffff",
"foregroundSecondaryColor": "#e5e7eb"
}
]
}
You can hardcode a design ID in your application if you always use the same design.
Step 3: Create Card Intent​
Create an intent to validate the card order and calculate fees:
curl -X POST https://api.brighty.codes/business/v1/cards/order/intent \
-H "Authorization: Bearer ${BRIGHTY_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"customerId": "mem_12345678-1234-1234-1234-123456789012",
"sourceCurrency": "USD",
"cardDesignId": "design_12345678-1234-1234-1234-123456789012",
"holderName": "John Doe"
}'
Response:
{
"amount": {
"amount": "5.00",
"currency": "USD"
},
"fees": {
"CARD_ISSUE": {
"sourceAmount": {
"amount": "5.00",
"currency": "USD"
},
"targetAmount": {
"amount": "5.00",
"currency": "USD"
},
"fx": null
}
},
"remainingLimits": {
"TOTAL": 10
},
"hash": "card_intent_hash_abc123def456789",
"holderNameValidity": {
"type": "VALID",
"holderName": "John Doe"
}
}
Step 4: Order the Card​
Use the intent data to order the actual card:
curl -X POST https://api.brighty.codes/business/v1/cards/order \
-H "Authorization: Bearer ${BRIGHTY_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"customerId": "mem_12345678-1234-1234-1234-123456789012",
"cardDesignId": "design_12345678-1234-1234-1234-123456789012",
"sourceAccountId": "acc_12345678-1234-1234-1234-123456789012",
"hash": "card_intent_hash_abc123def456789",
"fees": {
"CARD_ISSUE": {
"sourceAmount": {
"amount": "5.00",
"currency": "USD"
},
"targetAmount": {
"amount": "5.00",
"currency": "USD"
}
}
},
"holderName": "John Doe",
"cardName": "Corporate Card"
}'
Response:
{
"card": {
"id": "card_12345678-1234-1234-1234-123456789012",
"cardOwnerId": "business_12345678-1234-1234-1234-123456789012",
"cardHolderId": "mem_12345678-1234-1234-1234-123456789012",
"status": "CREATED",
"name": "Corporate Card",
"type": "DEBIT",
"network": "MASTERCARD",
"formFactor": "VIRTUAL",
"lastFour": "1234",
"bin": "555544",
"expirationDate": "2027-12",
"cardHolderName": "John Doe",
"securityPolicy": {
"contactless": false,
"internet": true,
"atm": false,
"location": false,
"ecommerce": true
},
"spendingStrategy": {
"name": "SINGLE",
"accountId": "acc_12345678-1234-1234-1234-123456789012",
"currency": "USD"
},
"spendingLimit": {
"name": "MONTHLY",
"limit": {
"amount": "5000.00",
"currency": "USD"
},
"spentAmount": {
"amount": "0.00",
"currency": "USD"
}
},
"createdAt": "2025-07-04T15:30:00Z",
"issuedAt": null,
"activatedAt": null,
"limitAmount": {
"amount": "5000.00",
"currency": "USD"
},
"availableAmount": {
"amount": "0.00",
"currency": "USD"
}
}
}
Step 5: Wait for Card to Become Issued​
The card starts with status CREATED and moves to ISSUED automatically. Check the card status:
curl -X GET https://api.brighty.codes/business/v1/cards/card_12345678-1234-1234-1234-123456789012 \
-H "Authorization: Bearer ${BRIGHTY_API_TOKEN}"
Response when issued:
{
"id": "card_12345678-1234-1234-1234-123456789012",
"status": "ISSUED",
"issuedAt": "2025-07-04T15:31:00Z"
// ... other card properties
}
Step 6: Activate the Card​
Once the card status is ISSUED, activate it to make it ready for transactions:
curl -X POST https://api.brighty.codes/business/v1/cards/card_12345678-1234-1234-1234-123456789012/activate \
-H "Authorization: Bearer ${BRIGHTY_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{}'
Response:
{
"id": "card_12345678-1234-1234-1234-123456789012",
"status": "ACTIVE",
"activatedAt": "2025-07-04T15:32:00Z",
"availableAmount": {
"amount": "5000.00",
"currency": "USD"
}
// ... other card properties
}
Your card is now ready for transactions!
Currency and Exchange Rates​
All Brighty cards have EUR as the base currency. Here's how currency conversion works:
Transaction Processing​
- EUR Transactions: If the user pays in EUR, no conversion occurs
- USD Transactions: If the user pays in USD, conversion from USD to EUR happens at the Mastercard scheme rate (use 0% bank fee in the Mastercard calculator)
- Dynamic Currency Conversion: If the user pays for a USD purchase in EUR (terminal choice), conversion uses the acquiring bank's rate
- Card Currency Conversion: If the card is linked to USDC (or another currency), EUR is then converted to the card's currency (e.g., EUR-USDC)
Rate Updates​
After clearing, exchange rates are updated both on the scheme side and Brighty's side. The transaction then receives its final status and final amounts.
Card Status Flow​
CREATED → ISSUED → ACTIVE
- CREATED: Card ordered, being processed by card provider
- ISSUED: Card issued by provider, ready for activation
- ACTIVE: Card activated and ready for transactions
For card management operations like freeze, unfreeze, and terminate, see the Card Management guide.