Where responsibility sits under DeCard-Managed: authorization decisions are made inside DCS, and every end customer holds their own balance (availablefree/ heldfreeze). So for questions like “why was this declined” or “did they have enough money”, start with that customer’s per-customer balance and card status, then factor in risk and MCC rules. This differs from the Partner-Managed model, where the partner runs its own limits and authorization decisions.
The card will not add to a digital wallet (Apple Pay / Google Pay)
When an end customer cannot add their card to a mobile wallet, walk them through the following in order:- Try a different card: this tells you straight away whether the problem is the card or the wallet and handset.
- Common causes:
- the country or region the handset is in does not match the card’s issuing market;
- Apple or Google has flagged the handset as a high-risk device;
- several cards were added in quick succession, tripping a rate limit on the wallet side.
- What to advise: a single device can normally only add one card successfully per 24 hours, so ask the customer to wait 24 hours and try again.
DeCard-Managed supports in-app provisioning (one-tap card binding inside your app) throughPOST /card/v1/apple-bind-walletand/card/v1/google-bind-wallet(Google also has a V2 endpoint of the same name). For the integration and field details, see Push provisioning (Apple / Google Pay).
The card will not save at a merchant (card-on-file)
When an end customer cannot store the card with a merchant or app:- some merchants validate the billing address strictly, so suggest the customer enter address details matching the card’s issuing market at checkout;
- if it still fails, note the transaction identifier and escalate to DCS for investigation through the escalation path. You can use
POST /card/v1/transaction/id/resolveto pull the transaction detail and pin down the record.
How to troubleshoot a declined transaction
Under DeCard-Managed, the authorization decision is made inside DCS. Work through it in this order:-
Confirm from the webhook whether it was declined: the callback URL you configured receives a
CARD_TRANSACTIONwebhook in whichdata.response="A"means approved and"D"means declined. That field is binary approve/decline only and carries no detailed decline reason code, so the reason has to be established manually through the steps below. -
Check the customer’s own balance: call
GET /user-asset/v1/balanceto see the customer’s wallet balance, specifically whetherfree(available) covers the purchase and how much is tied up infreeze(held). Insufficient balance is by far the most common decline reason.datain the response is an array returning{asset, free, freeze, total}per currency. For the fields and how to use them, see User balance. -
Check the card status: call
GET /card/v2/detailand readcardStatus(virtual card:NORMAL/FROZEN/CANCELLED) andphysicalCardStatus(physical card:UN_APPLY/INACTIVE/ACTIVE/REPLACE/FROZEN/CANCELLED). A card inFROZENorCANCELLEDwill never authorize.cardIdis returned in the successful card issuing response, and can also be looked up per customer withGET /card/v2/detail(leavecardIdempty to list all of the user’s cards). For frozen or canceled physical cards, readphysicalCardStatus. See the next section, “The card is frozen”. - Check risk rules and MCC: was a restricted merchant category (MCC) or a risk rule hit? If the balance is sufficient and the card status is fine but the transaction is still declined, contact DCS through the escalation path to confirm whether it hit a risk or MCC rule.
- Tell the customer: explain the decline reason based on what you found.
Authorization fields such asdirectionandauthTypeare described in Real-time authorization; the account asset and hold/debit model is in Basic concepts › Ledgering system.
The card is frozen: telling the states apart and what to do
ReadcardStatus from GET /card/v2/detail (virtual card):
- Unfreezing: call
POST /card/v2/blockwithexternalUserId,cardIdandblock(boolean,false= unfreeze /true= freeze) in the body, plus eithersmsCode(SMS OTP) oremailCode(email OTP), since unfreezing requires a one-time code. Freeze and unfreeze are the same endpoint distinguished by the booleanblock, not two separate endpoints.
ObtainsmsCodefromPOST /captcha/v1/send-mobile-code(withbehavioral=CARD_UNFROZEN) andemailCodefromPOST /captcha/v1/send-email-code. Either one is enough.
This endpoint identifies a card precisely by cardId. The card state machine and the operations allowed in each state are covered in Card management › Overview.
A refund or reversal has not landed yet
Refunds and reversals appear in the system as credit-direction records (direction = CREDIT), releasing held funds back into the customer’s free balance:
- once the merchant has initiated the refund or reversal there is an unavoidable delay before it lands, so ask the customer to be patient first.
-
Use
GET /card/v2/statements(statements) andPOST /card/v1/transaction/id/resolve(single transaction detail) to check the status and direction of the record.Pass one or more transaction IDs in
ids(outstandingTransactionIdorpostedTransactionId). The response distinguishesposted(whether it has been booked),outstandingTransactionId(null once booked) andpostedTransactionId(populated once booked). - If it still has not landed well beyond any reasonable window, escalate to DCS for investigation through the escalation path, quoting the original transaction identifier.
Actual refund and reversal timings depend on how the channel processes them. The fields and scenarios for refunds and reversals (authType=REFUND/REVERSAL,direction=CREDIT) are in Real-time authorization.
A cardholder disputes a transaction (dispute / fraud)
When an end customer claims a transaction was unauthorized, or is in dispute with the merchant:- first check the transaction detail with
GET /card/v2/statements/POST /card/v1/transaction/id/resolve(merchant name, amount, timestamp) to rule out a forgotten purchase or a family member’s spending; - if it really is a dispute or fraud claim, contact DCS through the escalation path to take it forward.
KYC has been in review for a long time on an issued card
If a customer’s KYC status has not moved on well after they applied:- Start with document quality and labeling: confirm the documents submitted are legible, are not screenshots, and are labeled with the correct type and side (for example the front of a national ID, and a correctly labeled selfie). The list of acceptable documents is in KYC documents.
- Check the current state: establish which stage the application is at, and if a resubmission is needed, guide the customer through it.
- Escalate after a reasonable wait: if the documents are sound and the application is still sitting in review, escalate to DCS through the escalation path, quoting the
externalUserIdand the KYC ticket identifier.
Rejection reasons are in KYC rejections and resubmission.
Changing the shipping address for a physical card
Once physical card shipping details are submitted they normally cannot be changed in flight. To correct them:- contact DCS through the escalation path to cancel that customer’s current card;
- have the customer apply for a new card with the correct address.
Canceling the current card and reapplying with the correct address is the standard way to correct a shipping address today. Shipping details and the physical card flow are covered in Card management › Overview.
Blocking a suspicious merchant
To block a specific merchant:- under DeCard-Managed the authorization decision is made inside DCS, so merchant-level and MCC-level blocking has to be configured on the DCS risk side;
- escalate through the escalation path with the merchant identifier and the reason for blocking, and DCS will apply it at the risk or scheme layer.
Next steps
- To escalate a case to DCS, or to understand the response path for each type of issue, go to Escalations and support paths.
- For questions about getting ready to launch, see Customer success › Overview (Pre-Go-Live FAQ).

