If there is an error with one of the transactions (e.g. because the transition is not allowed for the given transactionId) we do process all other transactions and return the list of untouched transactions.
See this page in the documentation to get to know more about partnerSubmissionStatus property and business logic.
We are adding a new endpoint that allows replacing cards.
Replace cards
We are introducing a new endpoint POST /cards/{cardId}/replace that enables you to replace existing cards with new ones.
When replacing cards all existing configurations will be set up automatically based on the values of the existing card (e.g. limit, transactionLimit ...)
The big advantage of replacing cards (in comparison to terminate and re-issue a new card) is that most subscriptions (that have been set up using the payment data of the replaced card) will still continue to work without updating the payment data. To put it differently: Most merchants (especially big ones) will still be able to deduct money using outdated payment details (PAN, CVV and expiry date). This effectively reduced the danger of failed payments until the payment details have been updated by the cardholder.
The endpoint only works for cards with types VIRTUAL, PHYSICAL or TRAVEL
Allowed values for property terminateCardReason are depending on card type
For cards with type PHYSICAL all values are valid. If LOST, STOLEN is provided, the replaced card gets automatically terminated; if DAMAGED or OTHER is provided the replaced card gets terminated only once the newly created card is activated.
For cards with type VIRTUAL or TRAVEL only the values STOLEN (for compromised card details) or OTHER are allowed. In both cases, the replaced card gets immediately terminated.
We added a couple of improvements to several parts of our API especially on your possibilities to maintain callback subscriptions.
Callback management
(1) We improved the management of subscriptions/callbacks
Consumers are now able to edit existing subscriptions simply by calling the respective POST endpoints with the updated payload.
We are introducing a new endpoint to fetch your current callback configuration: GET api/subscriptions. It returns a list of all active subscriptions.
Once the cardUpdated callback is sent for card updates (e.g. because the event CARD_DETAILS_CHANGED has happened) and no changes are made to the card limits the limitChangeproperty will be omitted from the payload from now on.
(2) We are introducing the possibility of setting a syncFromDate once you activate organization authorization via POST /organizations/{organizationId}/activate. Once set you will only receive callbacks for business entities with createdAt later than syncFromDate.
The default setting is the organization's creation date in the Pliants system hence if not set while calling the endpoint you are going to receive all callbacks for all business entities no matter if they occurred before setting up the connection between Pliant and your application.
If existing authorization is removed (e.g. customer disconnects) and added afterwards again we do use the previously set and already existing syncFromDate if not provided during any (additional) re-activation call.
If you want to remove the syncFromDate you can simply set it to a date before the organization's creation date.
We are not re-pushing any historical data. When you set thesyncFromDate in the past, you will only get updates on business entities in the past if the event is happening (and not for events that happened in the past).
Minor improvements
Previously it was possible to request or issue a card for a member in INACTIVE state. This is not possible anymore. Instead, the API will respond with HTTP status codes 404 and errorCodeNOT_FOUND.
We added cardholderId to transactionUpdated object that is sent for callbacks that can be subscribed via POST /transactions/subscription.
This week we are introducing travel purchasing cards to our API
New card type: TRAVEL
🚧
Important: This card type is disabled per default and each customer and/or partner needs to sign additonal contractual agreements for them to be enabled
Travel purchasing cards are virtual cards designed to be used in travel-related business processes.
From a business perspective travel purchasing cards,
only work for a specified set of merchants
are exempt from 3DS
From a technical perspective travel purchasing cards are basically the same as cards with type VIRTUAL.
Changes to the API
We introduced a new ENUM value TRAVEL for property type used in multiple endpoints for card and card requests entities.
To support our embedded partner's mission to build Pliants credit card as a service features seamlessly into their product we are introducing a flexible way to configure email notifications sent out by the Pliant Platform. Additionally, we are adding lots of new Events to our API to enable you to create your own, customized notification framework tailored for each and every one of your customers.
Configuring email notifications
To set up a custom email notification configuration please reach out to your contact at Pliant. We are going to provide all the necessary information to configure email notifications for your organisations accordingly.
You are able to define emails based on
email template (e.g. monthly limit of organization reacht, card request created ...)
role of the recipient within pliant (e.g. admin, owner, cardholder ...)
We are introducing a new way to activate physical cards. Instead of dedicated activation codes that need to be added to the card carrier you are able to activate cards via API based on the last four digits of the card's PAN.
Using refNum to activate physical cards
⚠️
To change the way your card manufacturer is preparing cards before shipping them out please consult directly with your contact person there
Previously it has only been possible to activate physical cards with a dedicated activation code that was provided by the card manufacturer when shipping the cards. This special (one-time) activation code needs to be added to the card carrier (e.g. sticker) and is sometimes overlooked by end users.
To address this issue we are enhancing our POST /cards/{cardId}/activate endpoint with a way to activate cards based on the last four digits of the PAN (which in our API we call refNum )
Added a request body property called activationMethod with allowed ENUM values activationCode & refNum
Allowed to provide activationCode values with 4 digits (previously 6 digits)
This applies to cards with the following TYPEs:
PHYSICAL
BLACK
Important: Once cards are replaced (currently only supported on the Pliant Platform; soon to be added to Pliant API) the activation method of the new card will match the one used for the replaced card.
We added a couple of improvements to several endpoints
New filter for transaction list and card requests
It is now possible
to filter transactions based on the query parameter partnerSubmissionStatus for our List of Transactions (GET /transactions) endpoint.
to filter card requests based on the query parameter type for our List Card Requests (GET /cards/requests) endpoint.
The allowed ENUM values are:
NOT_SYNCED
SYNCED
TEMP_LOCKED
LOCKED
VIRTUAL
SINGLE_USE
TRAVEL
PHYSICAL
BLACK
New endpoint to update cards
We are introducing a new endpoint PATCH /cards/{cardId} that enables to update label OR purpose property based on card type:
type
label
purpose
VIRTUAL
✅
❌
SINGLE_USE
❌
✅
TRAVEL
✅
❌
PHYSICAL
❌
❌
BLACK
❌
❌
New callback in case of changing transaction type
In some (rare) cases merchants do create purchases in the amount of 1.00 EUR instead of card checks. Later on, the transaction type changes from PURCHASE to STATUS_INQUIRY. To better handled such cases we introduced a new TRANSACTION_TYPE_UPDATED event in the transactions callback subscription endpoint: POST /transactions/subscription
Instead of returning HTTP response status code 204 No Content we do return 201 Created including the cardRequestId in the response body when creating card requests using the POST /cards/requests endpoint.
Fixed a bug where it was not possible to provide NULL value for purpose property when creating card requests using the POST /cards/requests endpoint.
We tightened the security of the endpoint which allows inviting an owner during onboarding. It's now only possible to call the endpoints POST /cardholders/invite-owner once the organisation is in one of the listed states without getting 403 error.
allow users to access data about their bank account (processingAccount)for top-up payments (relevant for pre-funded organizations only)
check what organization name is printed on the physical cards (tradeName) in cases where either the organization's name is too long (isCompanyNamePrintable == true) or customers simply opted to choose another company name to be printed on the cards.
💡Additionally we fixed a bug where the paymentFrequency property was set to MONTHLY for organizations with accountType == PREFUNDED
Here is the list of all properties that have been added to the response:
extending the Callback object cardholderUpdate with status property
Possible ENUMs are:
INVITED
ACTIVE
DEACTIVATED
Card limit changes
We do now provide more granular information about card limit changes. So whenever one of the listed properties of a card is updated we trigger the CARD_LIMIT_CHANGED callback (if setup via POST /cards/subscriptions).
transactionLimit
monthlyLimit (this one is deprecated)
limit
limitRenewFrequency
We provide a new property called limitChange which includes the previous and the new values so you can easily build e.g. notifications on top of it. Please find an example below:
We added the card limit frequencies feature to our API product.
📘
This topic is especially relevant for embedded partners!
What is it about?
We added something new to our API: card limit frequencies. With this feature, you are able to set a card limit frequency while creating cards and card requests as well as fetching data regarding card limit renewal when reading card data. You can even change the card limit frequency for existing cards.
What does it mean? Per default credit cards do revert back to their limit each calendar month. With card limit frequencies you are able to control if and when a card limit renews. There is even a way to define a total limit which is never gonna be renewed at all.
How to use it?
You do have a possibility now to define a card's limit frequency when...
... issuing a card (Issue card) or changing card limits (Update Card limits) via limit and limitRenewFrequency properties.
... requesting a card (Create card request) via requestedLimit and limitRenewFrequency properties.
... approving a card request (Approve Card Request) via approvedLimit and limitRenewFrequency properties.
For limitRenewFrequency you can choose between:
MONTHLY - card limit (set via limit property) refreshes every calendar month (default value)
QUARTERLY - card limit refreshes every calendar quarter
ANNUAL - card limit refreshes every calendar year
TOTAL - card limit does not refresh. Once the amount is spent the card is not usable anymore.
To keep track of this for existing and new cards we added a couple of new properties to our Card Details and Card Request Details endpoints.
limitRenewFrequency
requestedLimit(only for Card Request Details)
limit(only for Card Details)
limitPeriodEnd(only for Card Details)
limitRenewDate(only for Card Details)
❗️
With this feature we do put the monthlyLimit property to deprectated status. For now it returns the card limit (independent of the card limit frequency). As this is kind of misleading we ask you to build or adapt your implementation based on the new limit property.
Important notes:
If you modify the card limit frequency it affects cards immediately meaning that if an existing card is changed from QUARTERLY to MONTHLY the limit will be renewed with the next calendar month already!