Card Issuance
With the Cards API, you can offer debit cards to your users - requested, issued and managed through your platform, powered by Wise.
Please visit our Postman collection for more details and examples of how to use our API, including how to link users to your integration, create cards, manage spending limits, set authorization rules and simulate and retrieve card transactions.
Wise cards are linked to Wise Multi-Currency Accounts. The Multi-Currency Accounts guide is available here: Multi-Currency Accounts Guide
Guides on customer authentication can be found here:
Retrieve card programs availability
Retrieves the list of available card programs and their details.
Card program: a Card Program is what Wise calls all the cards you will be issuing with us, grouped by product type and by issuing country.
Issuing country: the country where your card is created.
Product type: the type of card we are issuing on your behalf (consumer, corporate, digital, physical, etc.).
curl -X GET https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/card-orders/availability \-H 'Authorization: Bearer <your api token>' \-H 'Content-Type: application/json'
{"cardPrograms": [{"name": "VISA_DEBIT_BUSINESS_UK_1","scheme": "VISA","defaultCurrency": "GBP","cardType" : "VIRTUAL_NON_UPGRADEABLE"}]}
Create a card order
POST /v3/spend/profiles/{{profileId}}/card-orders
Orders a new card for a given profile. The card program should come from the list of available card programs.
The lifetimeLimit
parameter is the maximum amount that can be spent with the card for the entire lifetime of the card. The lifetime limit currency is the card's default currency defined in the card program. The default lifetime limit value is 0, which means the card cannot be used until the lifetime limit is updated.
The billing address fields (firstLine
, secondLine
, thirdLine
, city
, state
) all have a maximum length of 30 characters.
Please also note that this call needs an extra field in the header called "X-idempotence-uuid". This should be generated and used for any subsequent retry call in the case that the initial POST fails.
The returned response contains the status
. The possible status values are:
PLACED
- The profile is not verified. The digital card will be generated once the profile is verified.REQUIREMENTS_FULFILLED
- The card is being generated, which usually takes less than one second.CARD_DETAILS_CREATED
- The card has been generated. The completion of a digital card order only takes a few extra milliseconds.COMPLETED
- The card has been generated and the card order has been completed.CANCELLED
- The card order has been canceled. This can happen if you ask Wise customer support team to cancel a card order.
Response
Returns a card order.
curl -X POST https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/card-orders \-H 'Authorization: Bearer <your api token>' \-H 'Content-Type: application/json' \-H 'X-idempotence-uuid: <generated uuid>' \-d '{"program": "<card program name>","cardHolderName": "<card holder name>","phoneNumber": "<phone number>","billingAddress": {"firstLine": "<first line of the address>","secondLine": "<optional second line>","thirdLine": "<optional third line>","city": "<city>","state": "<optional state>","postCode": "<optional postal code>","country": "<2 letter country code using ISO 3166-1 alpha-2>"},"lifetimeLimit": 100,}'
Retrieve all cards orders by profile
GET /v3/spend/profiles/{{profileId}}/card-orders?pageSize=10&pageNumber=1
The following parameters are optional:
pageSize
- the maximal number of requested card orders (used for pagination). This parameter has to be between 10 and 100 inclusive. If ommitted the default value 10 is used.pageNumber
- the requested page number starting from 1 (used for pagination). This parameter has to be equal or greater than 1. If ommitted the default value of 1 is used.
Both parameters are optional and if not provided their default values will be used.
Response
The returned response contains 2 elements:
totalCount
- the total number of card orders, this number is never affected by the givenpageSize
orpageNumber
parameterscardOrders
- the list of card orders starting from the givenpageNumber
(please keep in mind that the size of this list is limited by the givenpageSize
parameter with a default value of 10)
curl -X GET https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/card-orders?pageSize=10&pageNumber=1 \-H 'Authorization: Bearer <your api token>'
Retrieve details of a particular card order
GET /v3/spend/profiles/{{profileId}}/card-orders/{{cardOrderId}}
Retrieves the details of a particular card order given its id.
Response
Returns a card order.
curl -X GET https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/card-orders/{{cardOrderId}} \-H 'Authorization: Bearer <your api token>'
Retrieve all cards by profile
GET /v3/spend/profiles/{{profileId}}/cards?pageSize=10&pageNumber=1
Retrieves the details of all cards that belong to a given profile.
The following parameters are optional:
pageSize
- the maximal number of requested cards (used for pagination). This parameter has to be between 10 and 100 inclusive. If omitted the default value 10 is used.pageNumber
- the requested page number starting from 1 (used for pagination). This parameter has to be equal or greater than 1. If omitted the default value of 1 is used.
Both parameters are optional and if not provided their default values will be used.
Response
The returned response contains 2 elements:
totalCount
- the total number of cards, this number is never affected by the givenpageSize
orpageNumber
parameterscards
- the list of cards starting from the givenpageNumber
(please keep in mind that the size of this list is limited by the givenpageSize
parameter with a default value of 10)
curl -X GET 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards?pageSize=10&pageNumber=1 \-H 'Authorization: Bearer <your api token>'
Retrieve details of a card by card token
GET /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}
Retrieves the details of one card given its id (also referred as a card token).
Response
Returns a card object.
curl -X GET https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}} \-H 'Authorization: Bearer <your api token>'
Set card status by card token
PUT /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/status
Modifies the card status, where the possible new status values are:
ACTIVE
- the card is active and usableFROZEN
- the card is temporarily frozen resulting in all authorisation requests to be declinedBLOCKED
- the card is irreversibly blocked and is no longer usable
Response
Returns a card object.
curl -X PUT https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/status \-H 'Authorization: Bearer <your api token>' \-H 'Content-Type: application/json' \-d '{"status": "ACTIVE"}'
Get card limits
GET /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-limits
Retrieves the card limits
Response
Returns a set of limits for the card sent.
curl -X GET https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-limits \-H 'Authorization: Bearer <your api token>'
{"spendings": [{"type": "ATM_WITHDRAWAL","limits": null},{"type": "ECOM_PURCHASE","limits": null},{"type": "CHIP_WALLET_PURCHASE","limits": null},{"type": "GENERAL","limits": [{"type": "LIFETIME","usage": 2993.76,"threshold": 5000.00,"currency": "AUD","expiresAt": null}]}]}
Retrieve profile spend limits
Retrieves the profile limits.
Limit details are defined as follows:
Field | Description | Format |
---|---|---|
type | Card limit type. Allowed Values: TRANSACTION , DAILY , MONTHLY , LIFETIME | Text |
usage | How much was used so far | Decimal |
threshold | Threshold of the limit | Decimal |
currency | Limit currency | Text |
expiresAt | Date & time when a limit will reset | Text |
curl -X GET 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/spending-limits' \-H 'Authorization: Bearer {{API token}}'
{"spendings": [{"type": "ATM_WITHDRAWAL","limits": [{"type": "TRANSACTION","usage": 0,"threshold": 1750,"currency": "SGD","expiresAt": null},{"type": "DAILY","usage": 0,"threshold": 2700,"currency": "SGD","expiresAt": "2022-12-15T16:00:00Z"},{"type": "MONTHLY","usage": 0,"threshold": 5250,"currency": "SGD","expiresAt": "2022-12-31T16:00:00Z"}]},{"type": "ECOM_PURCHASE","limits": [{"type": "TRANSACTION","usage": 0,"threshold": 17500,"currency": "SGD","expiresAt": null},{"type": "DAILY","usage": 0,"threshold": 17500,"currency": "SGD","expiresAt": "2022-12-15T16:00:00Z"},{"type": "MONTHLY","usage": 0,"threshold": 35000,"currency": "SGD","expiresAt": "2022-12-31T16:00:00Z"}]},{"type": "CHIP_WALLET_PURCHASE","limits": [{"type": "TRANSACTION","usage": 0,"threshold": 4300,"currency": "SGD","expiresAt": null},{"type": "DAILY","usage": 0,"threshold": 5300,"currency": "SGD","expiresAt": "2022-12-15T16:00:00Z"},{"type": "MONTHLY","usage": 0,"threshold": 17500,"currency": "SGD","expiresAt": "2022-12-31T16:00:00Z"}]},{"type": "CONTACTLESS_PURCHASE","limits": [{"type": "TRANSACTION","usage": 0,"threshold": 900,"currency": "SGD","expiresAt": null},{"type": "DAILY","usage": 0,"threshold": 900,"currency": "SGD","expiresAt": "2022-12-15T16:00:00Z"},{"type": "MONTHLY","usage": 0,"threshold": 7000,"currency": "SGD","expiresAt": "2022-12-31T16:00:00Z"}]},{"type": "MAGSTRIPE_PURCHASE","limits": [{"type": "TRANSACTION","usage": 0,"threshold": 550,"currency": "SGD","expiresAt": null},{"type": "DAILY","usage": 0,"threshold": 700,"currency": "SGD","expiresAt": "2022-12-15T16:00:00Z"},{"type": "MONTHLY","usage": 0,"threshold": 2100,"currency": "SGD","expiresAt": "2022-12-31T16:00:00Z"}]}]}
Set card limits
PATCH /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-limits
Set or change card spending limits. By default, a new card will have a lifetime limit set to 0.
Card limit type (TRANSACTION
, DAILY
, MONTHLY
, LIFETIME
)
Limit amount on the card for the specified limit type.
Response
Returns a 200 response - No Content
curl -X PATCH https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-limits \-H 'Authorization: Bearer <your api token>' \-H 'Content-Type: application/json' \-d '{"cardLimitType": "LIFETIME","maxLimitAmount": <your spending limit value>}'
Delete lifetime limit
DELETE /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-limits/lifetime
Delete the lifetime limit.
Response
Returns a 200 response - No Content
curl -X DELETE https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-limits/lifetime \-H 'Authorization: Bearer <your api token>'
Get card permissions
GET /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-permissions
Retrieves the card permissions
Response
Returns a set of permissions for the card sent.
The possible type
values are:
ECOM
POS_CHIP
POS_MAGSTRIPE
ATM_WITHDRAWAL
POS_CONTACTLESS
MOBILE_WALLETS
curl -X GET https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-permissions \-H 'Authorization: Bearer <your api token>'
{"permissions": [{"type": "ECOM","isEnabled": false},{"type": "POS_CHIP","isEnabled": true},{"type": "ATM_WITHDRAWAL","isEnabled": false},{"type": "MOBILE_WALLETS","isEnabled": true}]}
Enable or disable card permissions
PATCH /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-permissions
Enable or disable a card permission
Must be one of the permission types as returned in get card permissions
Whether to enable to disable the permission
The possible type
values are:
ECOM
POS_CHIP
POS_MAGSTRIPE
ATM_WITHDRAWAL
POS_CONTACTLESS
MOBILE_WALLETS
Response
Returns a 200 response - No Content
curl -X PATCH https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/spending-permissions \-H 'Authorization: Bearer <your api token>'--d '{"type": <permission type>,"isEnabled": <true or false>}'
Get card transactions
GET /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/transactions?pageSize=10&pageNumber=1&fromTransactionDate=2022-11-01&toTransactionDate=2022-11-15
You can also use the card transaction webhook instead.
You can follow this guide to simulate various card transactions in the sandbox environment.
Retrieves the card transactions list.
The following parameters are optional:
pageSize
- the maximal number of requested card orders (used for pagination). This parameter has to be between 10 and 100 inclusive. If ommitted the default value 10 is used.pageNumber
- the requested page number starting from 1 (used for pagination). This parameter has to be equal or greater than 1. If ommitted the default value of 1 is used.fromTransactionDate
- the starting date of the date filter. The date format isYYYY-MM-DD
.toTransactionDate
- the end date of the date filter. The date format isYYYY-MM-DD
.
The possible type
values are:
ACCOUNT_CREDIT
- Receiving money on the card, excluding Visa OCT or Mastercard MoneySendACCOUNT_FUNDING
- Sending money to another card or e-walletCASH_ADVANCE
- Cash disbursementCASH_WITHDRAWAL
- ATM withdrawalCHARGEBACK
- Currently unused. Reserved for future use.CREDIT_TRANSACTION
- Visa OCT and Mastercard MoneySendECOM_PURCHASE
- Online purchasePOS_PURCHASE
- Purchase via a POS TerminalREFUND
- Partial or full refund of an existing card transaction
The possible state
values are:
IN_PROGRESS
- The transaction has been authorized but not captured.COMPLETED
- The transaction has been captured and/or settled.DECLINED
- The transaction has been declined.CANCELLED
- The transaction has been cancelled.UNKNOWN
- Default fallback status if the state can't be confirmed.
When a refund happens, a separate transaction will be added with a REFUND
transaction type.
Response
Returns a set of transactions for the card.
curl -X GET https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/transactions?pageSize=10&pageNumber=1&fromTransactionDate=2022-11-01&toTransactionDate=2022-11-15 \-H 'Authorization: Bearer <your api token>'
{"totalCount": 1,"transactions": [{"id": "342671","cardToken": "590b5b72-223d-45f9-b840-0ad4a4f80937","type": "ECOM_PURCHASE","declineReason": null,"createdDate": "2022-11-28T08:17:54.241236Z","state": "IN_PROGRESS","cardLastDigits": "3086","transactionAmount": {"amount": 1.5,"currency": "SGD"},"fees": [],"transactionAmountWithFees": {"amount": 1.5,"currency": "SGD"},"merchant": {"id": "332512","name": "Test Payment","location": {"country": "France","city": "Rouen","zipCode": "00000","region": null,"state": null},"category": {"name": "RMiscellaneousAndSpecial","code": "5999","description": "5999 R Miscellaneous and Special"}},"authorisationMethod": "MANUAL_ENTRY","balanceTransactionId": 2598366,"debits": [{"balanceId": 52832,"debitedAmount": {"amount": 1.06,"currency": "EUR"},"forAmount": {"amount": 1.5,"currency": "SGD"},"rate": 1.43073,"fee": {"amount": 0.01,"currency": "EUR"}}]}]}
Get card transaction by ID
GET /v3/spend/profiles/{{profileId}}/cards/transactions/{{transactionId}}
Retrieve a card transaction by transaction id.
The possible type
values are:
ACCOUNT_CREDIT
- Receiving money on the card, excluding Visa OCT or Mastercard MoneySendACCOUNT_FUNDING
- Sending money to another card or e-walletCASH_ADVANCE
- Cash disbursementCASH_WITHDRAWAL
- ATM withdrawalCHARGEBACK
- Currently unused. Reserved for future use.CREDIT_TRANSACTION
- Visa OCT and Mastercard MoneySendECOM_PURCHASE
- Online purchasePOS_PURCHASE
- Purchase via a POS TerminalREFUND
- Partial or full refund of an existing card transaction
The possible state
values are:
IN_PROGRESS
- The transaction has been authorized but not captured.COMPLETED
- The transaction has been captured and/or settled.DECLINED
- The transaction has been declined.CANCELLED
- The transaction has been cancelled.UNKNOWN
- Default fallback status if the state can't be confirmed.
When a refund happens, a separate transaction will be added with a REFUND
transaction type.
curl -X GET 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/transactions/{{transactionId}}-H 'Authorization: Bearer {{API token}}'
{"id": "342671","cardToken": "590b5b72-223d-45f9-b840-0ad4a4f80937","type": "ECOM_PURCHASE","declineReason": null,"createdDate": "2022-11-28T08:17:54.241236Z","state": "IN_PROGRESS","cardLastDigits": "3086","transactionAmount": {"amount": 1.5,"currency": "SGD"},"fees": [],"transactionAmountWithFees": {"amount": 1.5,"currency": "SGD"},"merchant": {"id": "332512","name": "Test Payment","location": {"country": "France","city": "Rouen","zipCode": "00000","region": null,"state": null},"category": {"name": "RMiscellaneousAndSpecial","code": "5999","description": "5999 R Miscellaneous and Special"}},"authorisationMethod": "MANUAL_ENTRY","balanceTransactionId": 2598366,"debits": [{"balanceId": 52832,"debitedAmount": {"amount": 1.06,"currency": "EUR"},"forAmount": {"amount": 1.5,"currency": "SGD"},"rate": 1.43073,"fee": {"amount": 0.01,"currency": "EUR"}}]}
Update card phone number
PUT /v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/phone-number
Update phone number of a card. The new phone number must be a valid phone number.
Must be a valid phone number prefixed with + and country code. An example of a valid phone number would be +6588888888
.
Response
Returns a 200 response
curl -X PUT 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/cards/{{cardToken}}/phone-number' \--H 'Authorization: Bearer <your api token>' \--d '{"phoneNumber": <new phone number>}'
{"token": "12345-12345-12345-12345","profileId": 30000000,"phoneNumber": "+6588888888"}
Retrieve dispute reasons
GET /v3/spend/profiles/{{profileId}}/dispute-form/reasons
Retrieves the list of possible reasons for submitting a dispute.
Response
Returns a set of dispute objects.
curl -X GET https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/dispute-form/reasons \-H 'Authorization: Bearer <your api token>'
Dispute dynamic flows entry point
GET /v3/spend/profiles/{{profileId}}/dispute-form/flows/{{scheme}}/{{reason}}?transactionId={{transactionId}}
Retrieves the JSON for initiating the dispute flow. The returned result can be used to generate the dispute flow UI using the Wise's open-source Dynamic Flows framework . The Dynamic Flows Framework will generate UI according to the received JSON and will handle the rest of the multi-step dispute submission including the generation of the subsequent pages (if needed) and the actual submission of the dispute and all the relevant documents.
An example of using a Dispute flow can be found here.
Scheme (VISA
, MASTERCARD
)
One of the reasons returned by /reasons
endpoint
ID of the transaction to dispute
Because the calls to the above endpoint are authorised they cannot be made from the Dynamic Flows JavaScript framework directly (from the browser), but instead must be proxied by the partner with the added auth headers. Therefore, a partner is expected to implement 2 additional internal endpoints:
1. Get Dynamic Form Page:
GET https://{{yourApiUrl}}/v3/spend/profiles/{{profileId}}/dispute-form/flows/step/{{scheme}}/{{reason}}?transactionId={{transactionId}}
The implementation of this endpoint is expected to redirect the call to:
POST https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/dispute-form/flows/step/{{scheme}}/{{reason}}
This implementation is also expected to add an email of the disputer and the ID of the disputed transaction. The email is added in order to allow direct communication with a person who knows the dispute details. The body of the POST
request forwarded to Wise should be of the following form:
{"email": "abc@def.com","transactionId": "<transaction id>"}
2. Post Dynamic Form Results:
The final step of the dispute flow will have to submit all the collected data to Wise. However, since Authorization
header is required, a partner is expected to implement the following endpoint (please note the absence of a step
in the URL path):
POST https://{{yourApiUrl}}/v3/spend/profiles/{{profileId}}/dispute-form/flows/{{scheme}}/{{reason}}
The request body will be generated by Dynamic Forms. The implementation of this endpoint is expected to redirect the call to:
POST https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/dispute-form/flows/{{scheme}}/{{reason}}
The response to this last call of the dynamic flow will include x-df-exit: true
HTTP header. This header is used by the JavaScript framework to add an option to exit the dynamic flow and redirect the user to a different page (or exit a WebView depending on the client's implementation). In order to intercept the last page response on the frontend onClose
function should be added to JavaScript, for example:
const onClose = () => {console.log("DF is exiting");window.location.href = "https://www.google.com/";};
Both endpoints are expected to proxy the requests with the added auth headers. In order to redirect the Dynamic Flows JavaScript library to your domain please use baseUrl
or fetcher
as part of the dynamic flows setup.
The Dynamic Form CSS styles can be overriden. An example of a Dispute flow with custom CSS can be found here.
curl -X GET 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/dispute-form/flows/{{scheme}}/{{reason}}?transactionId={{transactionId}}' \-H 'Authorization: Bearer <your api token>'
{"key": "TROUBLE_WITH_GOODS_SERVICES","type": "form","title": "There's a problem with the goods or service I ordered","actions": [],"schemas": [],"layout": [{"type": "decision","options": [{"title": "I never got the goods or service I ordered","action": {"url": "/v3/spend/profiles/12345/dispute-form/flows/visa/no-goods-or-services?transactionId=6789","method": "GET"},"disabled": false,"description": "Choose this if the order was cancelled or never arrived"},{"title": "Something is wrong with the goods or service I ordered","action": {"url": "/v3/spend/profiles/12345/dispute-form/flows/visa/something-wrong-what-was-received?transactionId=6789","method": "GET"},"disabled": false},{"title": "I think there might be an issue with the merchant","action": {"url": "/v3/spend/profiles/12345/dispute-form/flows/visa/scam?transactionId=6789","method": "GET"},"disabled": false,"description": "Choose this if you haven't heard from the merchant, or have found scam reviews"}]}]}
Retrieve sensitive card details
The sensitive card details endpoint allows you to retrieve card data such as Primary Account Number, expiry date, CVV and PIN.
Wise is a PCI DSS compliant provider, and stores all of your Cards API data securely. The scope for PCI compliance depends on your use case and will impact how you integrate with Cards API.
Rule based authorisation
It is possible to define which card transactions will be approved or declined by adding authorisation rules. Currently the only supported rules are based on MCC (Merchant Category Code) and transaction currency. An example list of MCC can be found here: https://www.citibank.com/tts/solutions/commercial-cards/assets/docs/govt/Merchant-Category-Codes.pdf. The currencies should be specified in ISO 4217 alphabetic format, for example USD.
The rules management is done as follows:
Adding an authorization rule
A rule is an instruction to Wise that dictates which transactions should be declined or approved. Defining a rule has no practical implication until it is applied to a particular CARD
/PROFILE
or every card, which is achieved by applying a rule to a PARTNER
.
The id
of a rule is unique and will refer to this rule in any further call.
The parameters for the creation of rules are as follows:
Field | Description | Format |
---|---|---|
type | Allowed Values: MCC , CURRENCY | Text |
operation | Defines whether the given values will be allowed or blocked. Allowed Values: ALLOW , BLOCK | Text |
description [optional] | Textual description of a rule, has no practical implication | Text |
values | The list of values to block or to approve | Array of Text |
curl -X POST 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/spend-controls/rule/authorisation' \-H 'Authorization: Bearer {{API token}}' \-H 'Content-Type: application/json' \-d '{"description": "my first test rule","type": "MCC","operation": "ALLOW","values": ["1234", "5678"]}'
{"id": 110000000,"description": "my first test rule","type": "MCC","operation": "ALLOW","values": ["1234","5678"]}
Delete an authorization rule
Deletes an existent rule. Rule deletion is only possible if a rule does not apply to any scope. If a rule was already applied to a scope, unapply
should be invoked prior to the rule deletion.
HTTP response code should be assessed to verify the success or failure of this call.
curl -X DELETE 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/spend-controls/rule/authorisation/{{ruleId}}' \-H 'Authorization: Bearer {{API token}}' \-H 'Content-Type: application/json'
List existing authorization rules
Lists all the defined rules. The list will include all the rules whether these were applied to a scope or not.
curl -X GET 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/spend-controls/rule/authorisation' \-H 'Authorization: Bearer {{API token}}'
[{"id": 1,"description": "gambling blacklisting","type": "MCC","operation": "BLOCK","values": ["7801","7802","7995","9754"]}]
Apply an authorization rule
The following endpoint applies a defined rule to a give scope (card/profile or partner). This will result in a rule being evaluated against every incoming card authorisation request for the given CARD/PROFILE/PARTNER.
HTTP response code should be assessed to verify the success or failure of this call.
The parameters for the apply endpoint are as follows:
Field | Description | Format |
---|---|---|
ruleId | The ID of a previously created rule | Text |
scope | Defines the scope to which a rule would apply to. Allowed Values: CARD , PROFILE , PARTNER | Text |
scopeId | The id of the scope defined above. It should be cardToken for CARD scope, prrofileId for PROFILE scope or clientId for PARTNER scope | Text |
curl -X POST 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/spend-controls/rule/apply' \-H 'Authorization: Bearer {{API token}}' \-H 'Content-Type: application/json' \-d '{"ruleId": 110000000000,"scope: "CARD","scopeId": "30000000000"}'
Unapply an authorization rule
This endpoint reverses the apply
endpoint and it's invocation will result in removing a rule from a given scope.
HTTP response code should be assessed to verify the success or failure of this call.
The parameters for the unapply endpoint are as follows:
Field | Description | Format |
---|---|---|
ruleId | The ID of a previously created rule | Text |
scope | Defines the scope to which a rule would apply to. Allowed Values: Allowed Values: CARD , PROFILE , PARTNER | Text |
scopeId | The id of the scope defined above. It should be cardToken for CARD scope, prrofileId for PROFILE scope or clientId for PARTNER scope | Text |
curl -X POST 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/spend-controls/rule/unapply' \-H 'Authorization: Bearer {{API token}}' \-H 'Content-Type: application/json' \-d '{"ruleId": 11000000000,"scope: "CARD","scopeId": "3000000000"}'
List applied authorization rules
Returns the list of all the active authorisation rules and the scopes they have been applied to.
curl -X GET 'https://api.sandbox.transferwise.tech/v3/spend/profiles/{{profileId}}/spend-controls/rule/applied' \-H 'Authorization: Bearer {{API token}}'
[{"ruleId": 1,"scope": "PROFILE","scopeId": "12345678"}]