Issue cards
Debit cards provided by Swan can be virtual, physical or digital, and they are all customizable to your needs.
Before creating cards you need to personalize their design. You can use our card design studio to get a 3D preview of how your card will look. Once you are satisfied you can replicate that design on the dashboard in the Cards tab. This design will be used everywhere, not just when printing your physical cards, but also in-app, when you display sensitive card information or provide alternative payment methods such as Apple Pay, Google Pay, etc...

Once you click on Save the card is instantly available in the Sandbox environment. If you want to make changes to your card design in the Live environment, you must switch your dashboard to Live mode, upload your logo one more time, and click Send to review. Then, a person will review your design before publishing it.
You can also design custom cards. Delivery takes 16 weeks instead of 10 days.
Once your card design is configured, you can start issuing in real-time. Virtual cards are usable instantly upon creation. With a simple API call, you can provide a card to the user that they can use online and via Apple Pay or Google Pay.
To add a card to their account via the web banking, a user must go to Members, select the member, and click on Add a card. After consenting, the virtual card is created and usable immediately. To do the same through the API, use the
addCard
mutation. This mutation used the accountMembershipId
as an identifier. To get it you need to use the following query.Request
Response
query MyQuery {
accountMemberships {
edges {
node {
id
}
}
}
}
{
"data": {
"accountMemberships": {
"edges": [
{
"node": {
"id": "{{YOUR_ID}}"
}
}
]
}
}
}
Once you have this ID, call the
addCard
mutation. Replace {{YOUR_ACCOUNTMEMBERSHIP_ID}}
with the last ID you obtained and {{YOUR_REDIRECT_URL}}
with the URL you want to redirect the user to.Request
Response
mutation MyMutation {
addCard(
input: {
accountMembershipId: "{{YOUR_ACCOUNTMEMBERSHIP_ID}}"
withdrawal: true
international: true
nonMainCurrencyTransactions: true
eCommerce: true
consentRedirectUrl: "{{YOUR_REDIRECT_URL}}"
name: "My First Swan Card"
}
) {
... on AddCardSuccessPayload {
__typename
card {
statusInfo {
... on CardConsentPendingStatusInfo {
__typename
consent {
consentUrl
}
}
}
id
}
}
}
}
{
"data": {
"addCard": {
"__typename": "AddCardSuccessPayload",
"card": {
"statusInfo": {
"__typename": "CardConsentPendingStatusInfo",
"consent": {
"consentUrl": "{{YOUR_CONSENT_URL}}"
}
},
"id": "{{YOUR_CARD_ID}}"
}
}
}
}
As this is a sensitive operation we ask the user's consent before issuing the card. You have to redirect them to the
consentUrl
so that they can give their approval. Once consent is given, the card is created.
Here's what a new card looks like on the Web Banking
To make online payments you usually need to provide the card number, the expiration date, and the CVC. All of this data is considered sensitive and is not directly available through the web banking interface or the API. To display this info to the end-user, call the mutation
viewCardNumbers
. The web banking uses this mutation when the Reveal card numbers button is clicked on.Replace
{{YOUR_CARD_ID}}
with the last ID obtained and {{YOUR_REDIRECT_URL}}
with the URL you want to redirect the user to.Request
Response
mutation MyMutation {
viewCardNumbers(input: { cardId: "{{YOUR_CARD_ID}}", consentRedirectUrl: "{{YOUR_REDIRECT_URL}}" }) {
... on ViewCardNumbersSuccessPayload {
__typename
consent {
consentUrl
id
}
}
}
}
{
"data": {
"viewCardNumbers": {
"__typename": "ViewCardNumbersSuccessPayload",
"consent": {
"consentUrl": "{{YOUR_CONSENT_URL}}",
"id": "{{YOUR_CONSENT_ID}}"
}
}
}
}
You need to open a native pop-up to display the
consentUrl
.This URL will redirect the user to a page with the card numbers displayed with the card design.
Here's the pop-up that displays sensitive card info
Both physical and virtual cards can be added to a wallet and used instantly.
You need to certify your digital card integration before being allowed to use Apple Pay and Google Pay. Send an email to [email protected] specifying that you'd like to activate in-app provisioning for digital payments. The team will help you get started.
There are multiple ways to add cards to a wallet (Apple or Google):
- 1.The end-user can do it themselves by entering the card number into the application
- 2.The end-user can use Swan App and follow the in-app provisioning process
- 3.You can initiate the in-app provisioning process through the addDigitalCard mutation
The end result is the same so you can choose whatever solution suits you best.
Replace
{{YOUR_CARD_ID}}
and {{YOUR_REDIRECT_URL}}
with the URL you want to redirect the user to.Request
Response
mutation MyMutation {
addDigitalCard(
input: {
cardId: "{{YOUR_CARD_ID}}"
walletProvider: ApplePay
consentRedirectUrl: "{{YOUR_REDIRECT_URL}}"
}
) {
... on AddDigitalCardSuccessPayload {
__typename
digitalCard {
id
statusInfo {
... on DigitalCardConsentPendingStatusInfo {
__typename
consent {
consentUrl
}
}
}
}
}
}
}
{
"data": {
"addDigitalCard": {
"__typename": "AddDigitalCardSuccessPayload",
"digitalCard": {
"id": "{{YOUR_DIGITAL_CARD_ID}}",
"statusInfo": {
"__typename": "DigitalCardConsentPendingStatusInfo",
"consent": {
"consentUrl": "{{YOUR_CONSENT_URL}}"
}
}
}
}
}
}
Beware that you should only use the walletProvider
alletproviderwalletProvider
corresponding to the user Authenticator. Use GooglePay for Android and ApplePay for iOS.To simulate the end of the process in sandbox, use the Event Simulator > Finalize in-App provisioning using the
digitalCard.id
you got with the addDigitalCard
mutation. Use the other tab (Manual Provisioning) to simulate a user adding a card manually to Google Pay or Apple Pay.To order a good old plastic card, use the API or the web banking interface. Just provide a delivery address and we'll take care of the rest. On the web banking interface, select the card and click on Order now. Then choose the address where you want to send the card.

Choose between a default address or add another one
The card will arrive 3-4 days after ordering. If you want to do the same thing via the API, use the
printPhysicalCard
mutation. Replace {{YOUR_CARD_ID}}
and {{YOUR_REDIRECT_URL}}
with the URL you want to redirect the user to.Request
Response
mutation MyMutation {
printPhysicalCard(
input: {
cardId: "{{YOUR_CARD_ID}}"
address: { addressLine1: "10 Rue de la Paix ", city: "Paris", postalCode: "75000", country: "FRA" }
choosePINCode: false
consentRedirectUrl: "{{YOUR_REDIRECT_URL}}"
}
) {
... on PrintPhysicalCardSuccessPayload {
__typename
physicalCard {
statusInfo {
... on PhysicalCardConsentPendingStatusInfo {
__typename
consent {
consentUrl
}
}
}
}
}
}
}
{
"data": {
"printPhysicalCard": {
"__typename": "PrintPhysicalCardSuccessPayload",
"physicalCard": {
"statusInfo": {
"__typename": "PhysicalCardConsentPendingStatusInfo",
"consent": {
"consentUrl": "{{YOUR_CONSENT_URL}}"
}
}
}
}
}
}
The
choosePINCode
variable is planned for the future and should be set as false for the moment. Choosing a pin code is a sensitive operation, and we need the user to consent to it.To activate the physical card, you must make a payment using the pin code. This pin code is accessible both on the web banking interface or via the API through the
viewPhysicalCardPin
mutation.Replace
{{YOUR_CARD_ID}}
and {{YOUR_REDIRECT_URL}}
with the URL you want to redirect the user to.Request
Response
mutation MyMutation {
viewPhysicalCardPin(input: { cardId: "{{YOUR_CARD_ID}}", consentRedirectUrl: "{{YOUR_REDIRECT_URL}}" }) {
... on ViewPhysicalCardPinSuccessPayload {
__typename
consent {
consentUrl
}
}
... on PINNotReadyRejection {
__typename
message
physicalCardIdentifier
}
}
}
{
"data": {
"viewPhysicalCardPin": {
"__typename": "ViewPhysicalCardPinSuccessPayload",
"consent": {
"consentUrl": "{{YOUR_CONSENT_URL}}"
}
}
}
}
A pin code is highly sensitive data, therefore we require the user to consent to the operation. After consenting, they are redirected to a white-labeled Swan page displaying the pin code.

To activate a physical Card a user must make a payment using their pin code. Only then can they use contactless, add the card to a wallet, pay online, etc. In the future, you will be able to activate a physical card using the
activatePhysicalCard
mutation.After you've completed the custom card design process with your Technical Account Manager, you can order additional custom physical cards with the API.
These API examples show how to use the
additionalPrintedLine
in physicalCardCustomOptions
. The additional line might include your $COMPANY_NAME
or something else, as long as it has been validated by Swan and Mastercard.addCards mutation
addCardsWithGroupDelivery mutation
printPhysicalCard mutation
Note
additionalPrintedLine
at line 14.1
mutation MyMutation {
2
addCards(
3
input: {
4
consentRedirectUrl: ""
5
cards: {
6
accountMembershipId: ""
7
withdrawal: false
8
international: false
9
nonMainCurrencyTransactions: false
10
eCommerce: false
11
spendingLimit: { period: Monthly, amount: { value: "", currency: "" } }
12
physicalCard: {
13
physicalCardCustomOptions: {
14
additionalPrintedLine: "$COMPANY_NAME"
15
}
16
deliveryAddress: {
17
addressLine1: ""
18
city: ""
19
postalCode: ""
20
country: ""
21
addressLine2: ""
22
state: ""
23
}
24
}
25
}
26
}
27
)
28
}
Note
additionalPrintedLine
at line 29.1
mutation MyMutation {
2
addCardsWithGroupDelivery(
3
input: {
4
consentRedirectUrl: ""
5
cardProductId: ""
6
groupDeliveryAddress: {
7
addressLine1: ""
8
city: ""
9
postalCode: ""
10
country: ""
11
firstName: ""
12
lastName: ""
13
phoneNumber: ""
14
addressLine2: ""
15
companyName: ""
16
state: ""
17
}
18
cards: {
19
accountMembershipId: ""
20
withdrawal: false
21
international: false
22
nonMainCurrencyTransactions: false
23
eCommerce: false
24
cardContractExpiryDate: ""
25
name: ""
26
spendingLimit: { period: Monthly, amount: { value: "", currency: "" } }
27
printPhysicalCard: false
28
physicalCardCustomOptions: {
29
additionalPrintedLine: "$COMPANY_NAME"
30
}
31
}
32
}
33
)
34
}
35
Note
additionalPrintedLine
at line 8.1
mutation MyMutation {
2
printPhysicalCard(
3
input: {
4
cardId: ""
5
address: { addressLine1: "", city: "", postalCode: "", country: "" }
6
choosePINCode: false
7
consentRedirectUrl: ""
8
physicalCardCustomOptions: { additionalPrintedLine: "$COMPANY_NAME" }
9
}
10
) {
11
... on PrintPhysicalCardSuccessPayload {
12
__typename
13
physicalCard {
14
offlineSpendingLimit
15
statusInfo {
16
... on PhysicalCardConsentPendingStatusInfo {
17
__typename
18
consent {
19
consentUrl
20
}
21
}
22
}
23
}
24
}
25
}
26
}
27
There are multiple settings that you can configure on a card, you can find them all on the card documentation. Those settings can be changed by the web banking interface or the API.

The Card settings page lets you select which operations are allowed
As this is a sensitive operation we will ask for user consent.
To obtain the same result using the API use the
updateCard
mutation. Replace {{YOUR_CARD_ID}}
and {{YOUR_REDIRECT_URL}}
with the URL you want to redirect the user to.Request
Response
mutation MyMutation {
updateCard(
input: {
cardId: "{{YOUR_CARD_ID}}"
withdrawal: false
international: false
nonMainCurrencyTransactions: false
eCommerce: false
consentRedirectUrl: "{{YOUR_REDIRECT_URL}}"
}
) {
... on UpdateCardSuccessPayload {
__typename
consent {
consentUrl
id
}
}
}
}
{
"data": {
"updateCard": {
"__typename": "UpdateCardSuccessPayload",
"consent": {
"consentUrl": "{{YOUR_CONSENT_URL}}",
"id": "{{YOUR_CONSENT_ID}}"
}
}
}
}
Now that you know how to issue cards we highly recommend you read this in-depth article about cards.
Last modified 7d ago