Appearance
Creation
This page describes the processes of Card creation, delivery, and activation.
Note – Cards may be both Virtual and Physical
If your Card Program allows it, the same Card may exist in both Physical and Virtual forms. In such cases, you can't know which one was used for a given transaction.
Process
Mandatory creation steps
- Create a Physical or Virtual Card associated to a Wallet
- Register 3D Secure using the dedicated endpoint
- Activate the Card (Cards are created in an inactive state, you must activate them)
Optional steps
- Define or change the Card PIN code
- Modify Card options or limits (payment limits, NFC activation, online payment, etc.)
- Update Card restrictions
- Lock or unlock the Card
- Convert a Virtual Card to a Physical one
Treezor encourages you to set all limits, options, and PIN code during the creation of the card, avoiding additional steps.
Tip – To create cards for a company's employees:
Set the employee's (Physical User) parentUserId
attribute with the userId
of the company (Legal Entity). The Card can be shipped at the company's address by setting sendToParent
value to true
. If so, the envelope bears the children's complete name and the parent address.
Card life cycle
Cards come with an expiryDate
, indicating when the card expires and when it should be renewed. Treezor sends webhooks to better handle this situation:
card.expiryAlert
– Indicates the card expires at the end of next month.card.update
withEXPIRED
status – Indicates the card expired.
Virtual Card creation
A Virtual Card is a Card (with a PAN, CVC, and expiration date) that does not exist in a physical form. It is made available to the end user in the form an image (that looks like a Card).
It can be used for online payments.
Parameters
Here are some of the most important parameters to define when creating a Virtual Card.
Attribute | Type | Description |
---|---|---|
userId | integer | The unique identifier of the cardholder |
walletId | integer | The unique identifier of the Wallet associated with the card. |
permsGroup | string | A code for a preset of permissions. It indicates whether the card main options (contactless, online payments, withdrawals, and international payments) are activated or not. |
cardPrint | string | The Card Program to associate to the Card and the options provided with it. This information is shared with you by Treezor. |
merchantRestrictionGroupId | integer | The unique identifier of your MID restriction group if you’ve created one in the previous step. |
mccRestrictionGroupId | integer | The unique identifier of your MCC restriction group if you’ve created one in the previous step. |
countryRestrictionGroupId | integer | The unique identifier of your Country restriction group if you’ve created one in the previous step. |
designCode | string | Customization code for the card design. If missing, falls back to the default Design Code. |
cardTag | string | Custom information for you to use as you see fit. See the Object tags article. |
Default limits may come with your Card Program, so fill in all the limits while making sure that you:
- Set all values you don't need to
0
to deactivate them - Set at least one
limitPayment{period}
and onelimitAtm{period}
limit to another value than0
Attribute | Type | Description |
---|---|---|
limitPaymentAll | integer | Lifetime payment limit |
limitPaymentYear | integer | Yearly payment limit |
limitPaymentMonth | integer | Monthly payment limit |
limitPaymentWeek | integer | Weekly payment limit |
limitPaymentDay | integer | Daily payment limit |
limitAtmAll | integer | Lifetime withdrawal limit |
limitAtmYear | integer | Yearly withdrawal limit |
limitAtmMonth | integer | Monthly withdrawal limit |
limitAtmWeek | integer | Weekly withdrawal limit |
limitAtmDay | integer | Daily withdrawal limit |
Request example
bash
curl -X POST '{baseUrl}/v1/cards/CreateVirtual' \
--header 'Authorization: Bearer {accessToken}' \
--header 'Content: application/json' \
-d '{payload}'
1
2
3
4
2
3
4
Here is an example of {payload}
:
json
{
"cardPrint": "{cardPrint}",
"userId": 8290083,
"walletId": 2464676,
"permsGroup": "TRZ-CU-011",
"mccRestrictionGroupId": 95447,
"merchantRestrictionGroupId": 45599,
"countryRestrictionGroupId": 165327,
"limitPaymentDaily":{limitPaymentDaily},
"limitAtmDaily":{limitAtmDaily}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Returns the Card object, with its cardId
(present in all CardTransactions).
json
{
"cards": [
{
"cardId": 241709,
"userId": 8290083,
"walletId": 2464676,
"walletCardtransactionId": 2473310,
"mccRestrictionGroupId": 95447,
"merchantRestrictionGroupId": 45599,
"countryRestrictionGroupId": 165327,
"publicToken": "107277882",
"cardTag": "",
"statusCode": "UNLOCK",
"isLive": 0,
"pinTryExceeds": 0,
"maskedPan": "519872******4839",
"embossedName": "ALEX OAK",
"expiryDate": "2026-10-31",
"CVV": "000", // Retrieve the CVV with cardImage or PCI DSS
"startDate": "2023-10-23",
"endDate": "0000-00-00",
"countryCode": "FR",
"currencyCode": "EUR",
"lang": null,
"deliveryTitle": "M",
"deliveryLastname": "OAK",
"deliveryFirstname": "ALEX",
"deliveryAddress1": "15 EDGEWOOD ROAD",
"deliveryAddress2": "",
"deliveryAddress3": "",
"deliveryCity": "ROSEWOOD",
"deliveryPostcode": "12365",
"deliveryCountry": "FR",
"mobileSent": "+33633333333",
"limitsGroup": "TRZ-VL-001",
"permsGroup": "TRZ-CU-011",
"cardDesign": "13664",
"virtualConverted": 0,
"physical": 0,
"optionAtm": 0,
"optionForeign": 0,
"optionOnline": 1,
"optionNfc": 1,
"limitAtmYear": 0,
"limitAtmMonth": 0,
"limitAtmWeek": 0,
"limitAtmDay": 1,
"limitAtmAll": 1,
"limitPaymentYear": 0,
"limitPaymentMonth": 0,
"limitPaymentWeek": 0,
"limitPaymentDay": 25,
"limitPaymentAll": 25,
"paymentDailyLimit": 0.0,
"totalAtmYear": null,
"totalAtmMonth": null,
"totalAtmWeek": null,
"totalAtmDay": null,
"totalAtmAll": null,
"totalPaymentYear": null,
"totalPaymentMonth": null,
"totalPaymentWeek": null,
"totalPaymentDay": null,
"totalPaymentAll": null,
"createdBy": 945198,
"createdDate": "2023-10-31 10:37:04",
"modifiedBy": 0,
"modifiedDate": "0000-00-00 00:00:00",
"renewalType": "A",
"renewalDate": null,
"originalCardId": null,
"totalRows": null,
"designCode": null,
"cardLanguages": "",
"eventName": "Master Wallet",
"eventAlias": "master-wallet-6537b83040735",
"restrictionGroupLimits": null,
"cancellationNumber": "",
"metadata": null,
"renewalDate": null,
"renewalType": null,
"originalCardId": null,
"logoId": "",
"logoBackId": "",
"packageId": "",
"customizeInfo": "",
"letterCustomizedInfo": "",
"freeCustomizedInfo": ""
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Treezor also sends a card.createvirtual
webhook.
Retrieving a Virtual Card image
The created virtual cards are available as an image (base64 encoded format). You can retrieve a card and expose it to your users.
To retrieve a virtual card, use the following request with the cardId
as a query parameter.
bash
curl -X POST '{baseUrl}/v1/cardimages?cardId={cardId}' \
--header 'Authorization: Bearer {accessToken}' \
1
2
2
It returns the Card Image object if successful:
json
{
"cardimages": [
{
"id": "155341",
"cardId": "239391",
"file": "/xj/base64encodedfile"
}
]
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Security – Sensitive data storage is forbidden
You are forbidden from storing card images on your servers (except if you are PCI/DSS certified).
Converting to physical
Converting a card consists in turning a virtual card into a physical one. The availability of this option depends on your Card Program. When doing so, all the card information, settings, and options remain unchanged.
Information – Conversion requires a delivery address for the Physical Card
If the User doesn't already have an address defined, you have to update it beforehand.
bash
curl -X PUT {baseUrl}/v1/cards/{cardId}/ConvertVirtual \
--header 'Authorization: Bearer {accessToken}' \
--header 'Content-Type: application/json'
1
2
3
2
3
Returns the Card object, with a virtualConverted
attribute set to 1
.
json
{
"cards": [
{
"cardId": 999894952,
"userId": 100198207,
"walletId": 2728965,
"walletCardtransactionId": 2905467,
"mccRestrictionGroupId": 0,
"merchantRestrictionGroupId": 0,
"countryRestrictionGroupId": 0,
"publicToken": "105608965",
"cardTag": "Event-test-card",
"statusCode": "UNLOCK",
"isLive": 0,
"pinTryExceeds": 0,
"maskedPan": "548821******4661",
"embossedName": "SPRINTREVIEW GRANDMA",
"expiryDate": "2027-05-31",
"CVV": "624",
"startDate": "2024-05-24",
"endDate": "0000-00-00",
"countryCode": "FR",
"currencyCode": "EUR",
"lang": null,
"deliveryTitle": "M",
"deliveryLastname": "GRANDMA",
"deliveryFirstname": "SPRINTREVIEW",
"deliveryAddress1": "12 RUE DE LA LIBERTE",
"deliveryAddress2": "",
"deliveryAddress3": "",
"deliveryCity": "PARIS",
"deliveryPostcode": "7501",
"deliveryCountry": "FR",
"mobileSent": "+33687432367",
"limitsGroup": "TRZ-VL-001",
"permsGroup": "TRZ-CU-012",
"cardDesign": "8529",
"virtualConverted": 1,
"physical": 0,
"optionAtm": 0,
"optionForeign": 1,
"optionOnline": 1,
"optionNfc": 1,
"limitAtmYear": 0,
"limitAtmMonth": 0,
"limitAtmWeek": 2000,
"limitAtmDay": 1000,
"limitAtmAll": 0,
"limitPaymentYear": 0,
"limitPaymentMonth": 0,
"limitPaymentWeek": 3000,
"limitPaymentDay": 2000,
"limitPaymentAll": 0,
"paymentDailyLimit": 500.0,
"totalAtmYear": null,
"totalAtmMonth": null,
"totalAtmWeek": null,
"totalAtmDay": null,
"totalAtmAll": null,
"totalPaymentYear": null,
"totalPaymentMonth": null,
"totalPaymentWeek": null,
"totalPaymentDay": null,
"totalPaymentAll": null,
"createdBy": 929252,
"createdDate": "2024-05-14 10:28:07",
"modifiedBy": 929252,
"modifiedDate": "2024-05-14 10:28:20",
"totalRows": null,
"designCode": null,
"cardLanguages": "",
"eventName": "Wallet transfer",
"eventAlias": "wallet-transfer-65eafdf301f56",
"restrictionGroupLimits": null,
"cancellationNumber": "",
"metadata": null,
"renewalDate": null,
"renewalType": null,
"originalCardId": null,
"logoId": "",
"logoBackId": "",
"packageId": "",
"customizeInfo": "",
"letterCustomizedInfo": "",
"freeCustomizedInfo": ""
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Physical card creation
A Physical Card is a Card that is shipped to the cardholder by mail and can for example be used in retail shops, gas station, etc. depending on applied restrictions.
If you want to display an image of a Physical Card to the end user, you must first create a Virtual Card and convert it to a Physical one. This allows you to show an image of the Virtual Card which bears the same PAN, CVC and expiration date.
Tip – Physical Cards are mailed to users
The following User attributes are required to send physical cards: title
, firstname
, lastname
, address{1-3}
, state
(Idemia only), city
, postcode
and country
.
Parameters
Here are some of the most important parameters to define when creating a Virtual Card.
Attribute | Type | Description |
---|---|---|
userId | integer | The unique identifier of the cardholder |
walletId | integer | The unique identifier of the Wallet associated with the card. |
permsGroup | string | A code for a preset of permissions. It indicates whether the card main options (contactless, online payments, withdrawals, and international payments) are activated or not. |
cardPrint | string | The Card Program to associate to the Card and the options provided with it. This information is shared with you by Treezor. |
anonymous | integer | Must be defined to 1 if the Card is assigned to an Anonymous User. |
merchantRestrictionGroupId | integer | The unique identifier of your MID restriction group if you’ve created one in the previous step. |
mccRestrictionGroupId | integer | The unique identifier of your MCC restriction group if you’ve created one in the previous step. |
countryRestrictionGroupId | integer | The unique identifier of your Country restriction group if you’ve created one in the previous step. |
designCode | string | Customization code for the card design. If missing, falls back to the default Design Code. |
cardTag | string | Custom information for you to use as you see fit. See the Object tags article. |
pin | string | The Card PIN code. Treezor recommends you set this value when creating the card, but if not, a random value is set by default. |
cardLanguages | string | Specifies a maximum of 4 preferred languages used to communicate with the Cardholder on ATMs. Expected as ISO 639-1 (code alpha-2) concatenated by priority (e.g., nrfrenes for Dutch 1st, French 2nd, English 3rd, Spanish 4th). |
batchDeliveryId | integer | Allows you to group Cards shipping together by specifying the same delivery ID to multiple Cards. |
logoId | string | Allows you to add a logo on the Card by specifying the file's name. |
logoBackId | string | Allows you to add a logo on the backside of the Card by specifying the file's name. |
packageId | string | Allows you to customize the Card packaging. |
customizedInfo | string | Allows you to add text on the Card. |
freeCustomizedInfo | string | Allows you to add more text on the Card. |
letterCustomizedInfo | string | Allows you to add text on letter that accompanies the Card. |
embossLegalName | boolean | Allows to emboss the User's legalName on the Card in addition to the cardholder's name, if defined to true . |
sendToParent | integer | Allows you to send the Card to the parent User, if defined to 1 . |
Default limits may come with your Card Program, so fill in all the limits while making sure that you:
- Set all values you don't need to
0
to deactivate them - Set at least one
limitPayment{period}
and onelimitAtm{period}
limit to another value than0
Attribute | Type | Description |
---|---|---|
limitPaymentAll | integer | Lifetime payment limit |
limitPaymentYear | integer | Yearly payment limit |
limitPaymentMonth | integer | Monthly payment limit |
limitPaymentWeek | integer | Weekly payment limit |
limitPaymentDay | integer | Daily payment limit |
limitAtmAll | integer | Lifetime withdrawal limit |
limitAtmYear | integer | Yearly withdrawal limit |
limitAtmMonth | integer | Monthly withdrawal limit |
limitAtmWeek | integer | Weekly withdrawal limit |
limitAtmDay | integer | Daily withdrawal limit |
Configuration – Some fields are not available by default
Contact your Treezor Account Manager to set the batchDeliveryId
, customizedInfo
, freeCustomizedInfo
, letterCustomizedInfo
, logoId
, logoBackId
, and packageId
.
Request
You can use the following request to create a physical card.
bash
curl -X POST {baseUrl}/v1/cards/RequestPhysical \
--header 'Authorization: Bearer {accessToken}' \
--header 'Content-Type: application/json' \
-d '{payload}'
1
2
3
4
2
3
4
Here is an example of {payload}
:
json
{
"userId":{userId},
"walletId":{walletId},
"permsGroup":"TRZ-CU-016",
"cardPrint":{cardPrint},
"cardTag":"This field can be populated as you see fit",
"limitPaymentDaily":{limitPaymentDaily},
"limitAtmDaily":{limitAtmDaily}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Returns the Card, with its cardId
(present in all CardTransactions). The Card can now be activated.
json
{
"cardId": 0,
"userId": 0,
"walletId": 0,
"cardTag": "string",
"statusCode": "UNLOCK",
"isLive": 0,
"pinTryExceeds": 0,
"embossedName": "string",
"expiryDate": "string",
"CVV": "string",
"limitsGroup": "string",
"permsGroup": "string",
"cardDesign": "string",
"virtualConverted": 0,
"optionAtm": 0,
"optionForeign": 0,
"optionOnline": 0,
"optionNfc": 0,
"limitAtmYear": 0,
"limitAtmMonth": 0,
"limitAtmWeek": 0,
"limitAtmDay": 0,
"limitAtmAll": 0,
"limitPaymentYear": 0,
"limitPaymentMonth": 0,
"limitPaymentWeek": 0,
"limitPaymentDay": 0,
"limitPaymentAll": 0,
"paymentDailyLimit": 0,
"restrictionGroupLimits": [
{
"paymentDailyLimit": 0,
"mccRestrictionGroups": 0,
"countryRestrictionGroups": 0,
"merchantIdRestrictionGroups": 0
}
],
"createdBy": 945198,
"createdDate": "2023-10-31 10:37:04",
"modifiedBy": 0,
"modifiedDate": "0000-00-00 00:00:00",
"renewalType": "A",
"renewalDate": null,
"originalCardId": null,
"totalRows": null,
// [...] some attributes are hidden
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Physical Cards can be identified by the following attributes:
physical
=1
orphysical
=0
along withvirtualConverted
=1
Treezor also sends a card.requestphysical
webhook.
Expedition tracking Beta
Optionally, Treezor sends a card.expeditionTracking
webhook when the card manufacturer mails the physical card, allowing you to track the expedition and inform your end users.
Configuration – Feature not enabled by default
The expedition tracking feature may be available for your card product. Contact Treezor to configure this option.
Bulk Creation
Configuration – Bulk Creation is not enabled by default
You can request access to this feature by contacting your Treezor Account Manager.
Depending on your use case, it may be more suitable for you to create Cards in bulk.
Attention – Card Program restrictions
Bulk Card creation is only available with a Card Program (cardPrint
) of type Virtual to Physical.
Creation
Parameters
Attribute | Type | Description |
---|---|---|
number | integer | The number of cards to be created. There may be limitations to the maximum number of cards you can create at once. |
virtual | boolean | Defines whether the cards are to be Physical or Virtual ones. |
defaultPermsGroup | string | A code for a preset of permissions. It indicates whether the card main options (contactless, online payments, withdrawals, and international payments) are activated or not. |
walletTypeId | integer | The type of Wallets the cards will be associated to. |
createWalletForEach | boolean | Defines whether to create one Wallet per card. |
cardDeliveryAddress1 | string | The first line of the delivery address for physical cards. |
cardDeliveryPostCode | string | The postal code of the delivery address. |
cardDeliveryCity | string | The city of the delivery address. |
cardDeliveryCountry | string | The country of the delivery address. |
anonymous | integer | Defines whether the cards are to belong to Anonymous Users. If so set the value to 1 , otherwise 0 . |
cardPrint | string | The Card Program to associate to the Card and the options provided with it. This information is shared with you by Treezor. |
logoId | string | Customizes the cards with a logo. |
logoBackId | string | Customizes the backside of the cards with a logo by specifying the file's name. |
packageId | string | Customizes the packaging of the cards. |
customizedInfo | string | Adds text on the cards. |
freeCustomizedInfo | string | Adds more text on the cards. |
letterCustomizedInfo | string | Adds text on the letter that comes with the cards. |
defaultMccRestrictionGroupId | integer | The unique identifier of the MCC Restriction Group to associate with the cards. |
defaultMerchantRestrictionGroupId | integer | The unique identifier of the MID Restriction Group to associate with the cards. |
defaultCountryRestrictionGroupId | integer | The unique identifier of the Country Restriction Group to associate with the cards. |
Default limits may come with your Card Program, so fill in all the limits while making sure that you:
- Set all values you don't need to
0
to deactivate them - Set at least one
limitPayment{period}
and onelimitAtm{period}
limit to another value than0
Attribute | Type | Description |
---|---|---|
limitPaymentAll | integer | Lifetime payment limit |
limitPaymentYear | integer | Yearly payment limit |
limitPaymentMonth | integer | Monthly payment limit |
limitPaymentWeek | integer | Weekly payment limit |
limitPaymentDay | integer | Daily payment limit |
limitAtmAll | integer | Lifetime withdrawal limit |
limitAtmYear | integer | Yearly withdrawal limit |
limitAtmMonth | integer | Monthly withdrawal limit |
limitAtmWeek | integer | Weekly withdrawal limit |
limitAtmDay | integer | Daily withdrawal limit |
bash
curl -X POST {baseUrl}/core-connect/card/bulk \
--header 'accept: application/json' \
--header 'authorization: Bearer {accessToken}' \
--header 'content-type: application/json' \
-d '{payload}'
1
2
3
4
5
2
3
4
5
Here is an example of {payload}
.
json
{
"number":5,
"virtual":false,
"defaultPermsGroup":"TRZ-CU-016",
"walletTypeId":10,
"createWalletForEach":true,
"createUserForEach":true,
"cardDeliveryAddress1":"33 avenue Wagram",
"cardDeliveryPostCode":"75017",
"cardDeliveryCity":"Paris",
"cardDeliveryCountry":"FR",
"anonymous":1,
"cardPrint":"8528",
"logoId":"",
"packageId":""
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Answers with a 201
HTTP Status Code and returns the following:
json
{
"createWalletForEach":true,
"walletTypeId":10,
"createUserForEach":true,
"number":5,
"defaultPermsGroup":"TRZ-CU-016",
"packageId":"",
"logoId":"",
"anonymous":1,
"cardPrint":"8528",
"virtual":false,
"cardDeliveryAddress1":"33 avenue Wagram",
"cardDeliveryPostCode":"75017",
"cardDeliveryCity":"Paris",
"cardDeliveryCountry":"FR",
"orderId":"d1fca687-9dbd-4530-8a80-336f2b56421a",
"status":"PENDING"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Bulk Creation are asynchronous, you therefore have a second endpoint to follow their progress.
Follow Bulk Creations
To follow your Bulk Creations progress, you can use the following request
bash
curl -X GET {baseUrl}/core-connect/card/bulk \
--header 'accept: application/json' \
--header 'authorization: Bearer {accessToken}'
1
2
3
2
3
Returns the following.
json
[
// this represents a Bulk Creation that completed with some errors
// more information is contained in the "errors" attribute
{
"orderId":"0c6251ad-6b84-4e74-a926-8a193974248d",
"walletIdAttach":null,
"createWalletForEach":true,
"walletTypeId":9,
"userIdOwner":null,
"createUserForEach":true,
"number":1,
"defaultMccRestrictionGroupId":null,
"defaultMerchantRestrictionGroupId":null,
"defaultCountryRestrictionGroupId":null,
"defaultPermsGroup":"TRZ-CU-003",
"status":"COMPLETE_WITH_ERROR",
"createdAt":"2021-09-02T14:00:59+02:00",
"errors":[
"[{\"code\":\"unexpected_error\",\"docurl\":\"https:\/\/developers.treezor.co\",\"type\":\"unexpected_internal_server_error\",\"message\":\"An unexpected error was raised in our server. Please try again later, if same result please contact support\"}]"
],
"packageId":null,
"logoId":null,
"anonymous":1,
"cardPrint":"8528",
"paymentDailyLimit":null,
"limitPaymentAll":null,
"limitPaymentDay":null,
"limitPaymentWeek":null,
"limitPaymentMonth":null,
"limitPaymentYear":null,
"limitAtmAll":null,
"limitAtmDay":null,
"limitAtmWeek":null,
"limitAtmMonth":null,
"limitAtmYear":null,
"virtual":false,
"cardDeliveryAddress1":"33 avenue Wagram",
"cardDeliveryAddress2":null,
"cardDeliveryAddress3":null,
"cardDeliveryPostCode":"75017",
"cardDeliveryCity":"Paris",
"cardDeliveryState":null,
"cardDeliveryCountry":"FR"
},
// this represents a Bulk Creation that succeeded without any errors
{
"orderId":"11520318-6c26-4207-aebb-97280a857537",
"walletIdAttach":922972,
"createWalletForEach":null,
"walletTypeId":null,
"userIdOwner":1731771,
"createUserForEach":null,
"number":50,
"defaultMccRestrictionGroupId":null,
"defaultMerchantRestrictionGroupId":null,
"defaultCountryRestrictionGroupId":null,
"defaultPermsGroup":"TRZ-CU-016",
"status":"COMPLETE",
"createdAt":"2021-08-23T10:55:28+02:00",
"errors":[],
"packageId":null,
"logoId":null,
"anonymous":1,
"cardPrint":"8528",
"paymentDailyLimit":null,
"limitPaymentAll":null,
"limitPaymentDay":null,
"limitPaymentWeek":null,
"limitPaymentMonth":null,
"limitPaymentYear":null,
"limitAtmAll":null,
"limitAtmDay":null,
"limitAtmWeek":null,
"limitAtmMonth":null,
"limitAtmYear":null,
"virtual":true,
"cardDeliveryAddress1":null,
"cardDeliveryAddress2":null,
"cardDeliveryAddress3":null,
"cardDeliveryPostCode":null,
"cardDeliveryCity":null,
"cardDeliveryState":null,
"cardDeliveryCountry":null
},
// this represents a Bulk Creation that is still pending
{
"orderId":"1775d8da-2edc-46b6-87d6-948bc184511b",
"walletIdAttach":null,
"createWalletForEach":true,
"walletTypeId":10,
"userIdOwner":null,
"createUserForEach":true,
"number":5,
"defaultMccRestrictionGroupId":5053,
"defaultMerchantRestrictionGroupId":4932,
"defaultCountryRestrictionGroupId":2410,
"defaultPermsGroup":"TRZ-CU-016",
"status":"PENDING",
"createdAt":"2021-10-26T10:54:53+02:00",
"errors":[],
"packageId":null,
"logoId":null,
"anonymous":1,
"cardPrint":"8529",
"paymentDailyLimit":null,
"limitPaymentAll":null,
"limitPaymentDay":null,
"limitPaymentWeek":null,
"limitPaymentMonth":null,
"limitPaymentYear":null,
"limitAtmAll":null,
"limitAtmDay":null,
"limitAtmWeek":null,
"limitAtmMonth":null,
"limitAtmYear":null,
"virtual":true,
"cardDeliveryAddress1":"10 avenue Vagram",
"cardDeliveryAddress2":null,
"cardDeliveryAddress3":null,
"cardDeliveryPostCode":"75000",
"cardDeliveryCity":"Paris",
"cardDeliveryState":null,
"cardDeliveryCountry":"FR"
}
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Activation
As a security measure, all Cards are issued in an inactive
state to ensure that a Physical Card is not usable before the cardholder receives it.
A Card in an inactive
state cannot be used to make any type of payment or withdrawal.
Typically, the end user would be required to activate the card in your application by entering the publicToken
as printed on the back of the received Card.
bash
curl -X PUT {baseUrl}/v1/cards/{id}/Activate \
--header 'Authorization: Bearer {accessToken}'
1
2
2
Returns a Card object, with its isLive
attribute set to 1
.
json
{
"cardId": 0,
"userId": 0,
"walletId": 0,
"walletCardtransactionId": 0,
"mccRestrictionGroupId": 0,
"merchantRestrictionGroupId": 0,
"countryRestrictionGroupId": 0,
"publicToken": "string",
"cardTag": "string",
"statusCode": "UNLOCK",
"isLive": 1, // <--- affected attribute
// [...] some attributes are hidden
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Users of may also activate a Card in one step, using its publicToken
directly.
bash
curl -X PUT {baseUrl}/v1/cards/{cardToken}/public-token-activation \
--header 'Authorization: Bearer {accessToken}'
1
2
2
Also returns a Card object, with its isLive
attribute set to 1
.
Treezor also sends a card.activate
webhook.
Enrolling a Card for 3D Secure
3D Secure provides an enhanced level of security for online (e-commerce) payments by adding the possibility to authenticate the cardholder. Registering the card for 3D Secure requires a mobile phone number. The cardholder will then be sent a secure code on their mobile phone when an authentication is required for an online payment. This code is unique for each payment and needs to be entered on the merchant's website or mobile application when prompted.
Prior to this step, your must ensure the User was created with a mobile phone number. Otherwise, the User must be updated with a mobile phone number.
bash
curl -X POST {baseUrl}/v1/cards/Register3DS \
--header 'Authorization: Bearer {accessToken}' \
--header 'Content-Type: application/json' \
-d '{
"cardId": 123456
}'
1
2
3
4
5
6
2
3
4
5
6
This returns a Card object, but doesn't specify the 3D Secure enrolling status. Treezor also sends a card.register3DS
webhook.
Configuration – By default, 3DS SMS are sent under the name "Secure3DS"
You can contact Treezor and provide a new sender name that:
- Contains only alphanumeric characters (no spaces)
- Starts with a letter
- Is less than 12-character long
Customization
Cards can be customized with the following values.
Configuration – There is no API endpoint to manage these features.
If you are interested in customizing the cards, please contact your Treezor Account Manager.
Logo (logoId
)
You can add a customized logo by setting its filename in the logoId
parameter. This logo is overlaid to your usual Card Design.
The constraints are as follows:
- Format:
.jpeg
,.pcx
or.png
(other formats need to be checked for compatibility) - Definition: 600 PPI
- Maximum size: depends on your Card Design
- String: Can't exceed 30 characters
- Transparent background is recommended. In any case, white content will not be printed.
Back Logo (logoBackId
)
You can add a customized logo on the backside of the Card by setting its filename in the logoBackId
parameter. This logo is overlaid to your usual Card Design.
The constraints are as follows:
- Format:
.jpeg
,.pcx
or.png
(any other format will have to be checked for compatibility) - Definition: 600 PPI
- Maximum size: depends on your Card Design
- String: Can't exceed 30 characters
- Transparent background is recommended. In any case, white content will not be printed.
Card Delivery Method (deliveryMethod
)
You can define the method the manufacturer uses to send the cards (e.g., delivery with or without tracking).
The possible options are to be defined with your Treezor Account Manager. They range from 0
to 9
and depend on your specific implementation with the manufacturer.
Pin Mailer (pinMailer
)
You can request the card manufacturer to send the card PIN code by letter.
This requires a specific configuration of the card production chain with the manufacturer. Then, this option can be activated by your Treezor Account Manager by setting this value to 1
.
Batch Delivery (batchDeliveryId
)
The Batch Delivery system lets you receive physical cards in batches if enabled. Cards with the same values for the parameters below will be sent together.
Information | Description |
---|---|
Delivery ID | All the cards must have the same batchDeliveryId value (must be between 1 and 238327 ). |
Address | All the cards must have the same delivery address. Please keep in mind that the delivery parameters of the card default to either:
|
Information – Batch orders are generated daily
Treezor usually sends the batch orders to the manufacturer in the afternoon. If cards with the same batchDeliveryId
are created before and after the cut-off time, they are likely to be sent in 2 different batches.
Packaging (packageId
)
The packageId
allows you to use multiple Cards Packaging with the same Card Program. This feature can also be used to handle packaging in different languages.
This is set up between you and your Treezor Account Manager.
Designs (designCode
)
The designCode
allows you to use multiple Card Designs with the same Card Program. This design applies on Virtual Cards, Physical Cards, and digitized Cards.
To use a specific design, you will need to specify the designCode
along with your usual cardPrintId
.
The final design identification code will be a concatenation of the cardPrintId
+ z
+ designCode
. Once created, Card objects returned by the API will not specify which designCode
was used. It is therefore recommended that you store this information in your own databases.
Customized Info (customizedInfo
)
The customizedInfo
allows you to add specific text on each Card.
There is a maximum of 27 alphanumeric characters excluding !"#%'(),:;<>?@[]^
and the backtick symbol. The actual length limitation will depend on the choosen font and on the position of the text on the Card.
Additional Customized Info (freeCustomizedInfo
)
The freeCustomizedInfo
allows you to add more specific text on each Card in a similar way to customizedInfo
.
There is a maximum of 50 alphanumeric characters excluding !"#%'(),:;<>?@[]^
and the backtick symbol. The actual length limitation will depend on the choosen font and on the position of the text on the Card.
Letter Customized Info (letterCustomizedInfo
)
The letterCustomizedInfo
allows you to add specific text on the letter that accompanies a Card.
There is a maximum of 50 alphanumeric characters excluding !"#%'(),:;<>?@[]^
and the backtick symbol.