Skip to main content

Authorization: the decision comes back to you

Whether you want to own cardholder limits outright or apply your own risk rules transaction by transaction, authorization forwarding lets you decide, at the moment of every card payment, whether to approve or decline. DCS is a licensed issuer with its own BIN: we forward each real-time network authorization request to you securely and place or release the fund hold on your behalf. The limits belong to the partner, and so does the authorization decision. An authorization happens the instant a cardholder pays. It is a real-time decision and moves no money. Funds actually leave the account later, at settlement (see Transaction records and Authorization and settlement).

Mental model: the life of one authorization

Sequence of one authorization requestSequence of one authorization request
Under Partner-Managed, the decision always stays with the partner. The forwarding channel adds two-way RSA encryption and signing, so no business field ever travels in clear text.

Transaction direction (direction)

INCOMING authorizations — refunds with an original authorization, reversals — are forwarded through authUrl as well. DCS recommends that the partner simply return 00 (approve) for these INCOMING authorizations; the partner may still decline in abnormal cases, such as when an INCOMING release exceeds the amount currently held.

Authorization type (authType)

authType tells you how an authorization record came into being, so you can separate a live authorization from a system back-fill or release. Only NORMAL authorizations are forwarded through authUrl for the partner’s real-time decision; FORCE_AUTH / EXPIRED_RELEASE / STATUS_DIFF_RELEASE are system-side authorizations that never go through authUrl and are only pushed as receipts through the AUTHORISATION_RESULT webhook. The field appears both in the authorization webhook request and in the daily authorization report (see Authorization report).
the authType of an authorization forwarding notification and the sandbox field APISimulationAuthRequest.authType (EXPEND / REFUND / REVERSAL) are two independent enumerations, one for real authorization callbacks and one for sandbox triggers. Do not mix them.

Authorization transaction type (transactionType)

transactionType describes the nature of the cardholder’s transaction, which helps both your authorization decision and your reconciliation breakdown.

Authorization result (responseCode): your reply

Once the partner has decided, it returns the outcome to DCS in responseCode:
How it is stored: the authorization forwarding notification is answered with responseCode, and the persisted mapping is fixed at 00 → approveFlag=A, with 01 / 11 / 21 and any other non-00 value mapping to approveFlag=D. approveFlag appears in the authorization result webhook and the daily authorization report. In production the synchronous response window is 2.5 seconds; the partner must reply within it. A timeout is treated as responseCode=21 / DAPI_AUTH_ENTERPRISE_TIMEOUT_REJECT, and a real-time authorization is never retried.

The forwarding notification: who does what on the secure channel

An authorization request is not an ordinary webhook. It travels over a channel protected by two-way RSA encryption and signing, with every business field wrapped inside encryptedData rather than sent in clear text.

Prerequisites (partner)

  • Your enterprise has been created and both authUrl and externalPublicKey (your RSA public key) are configured. See First steps.
  • The IP allowlist for the authorization forwarding notification is in place.
  • You have issued a card successfully.
The sandbox DCS RSA public key can be copied straight from the Authentication guide; for the production key, contact the DCS team.

The round trip

Signature algorithm: RSA-SHA256 (SHA256withRSA), 2048-bit keys, with chunked encryption and decryption (245-byte encryption blocks, 256-byte decryption blocks). Full Java sample code is on the Authentication guide page.
Two-way RSA encryption and signing flowTwo-way RSA encryption and signing flow
Notification URL template: https://{domain}/xxx/v1/auth-notification (the POST that DCS sends to your authUrl).

Request and response structure

Request header

Request body

Time zone: authorization notifications and the reconciliation files both carry UTC+8 (+08:00) timestamps; the one exception is the velocity-limit query endpoint, whose date fields are UTC. Store the offset explicitly so that comparisons across endpoints do not drift.

Business fields inside encryptedData

cardAcceptorNameLocation

A fixed 40-character text; each segment is left-justified and right-padded with spaces.
Visa
Mastercard

Response body

Structure inside encryptData:
the encrypted field on the request side is data.encryptedData (nested inside data), while on the response side it is encryptData (top level, spelled differently). The names do not match, so read each one from its own structure and never treat them as interchangeable.

Minimal authorization request example

Response (partner to DCS):
This forwarding notification is a dedicated secure channel from DCS to your authUrl. It does not use the common response envelope {code, message, messageDetail, data} of the /open-api/ endpoints, which applies only to the calls you initiate (see Authentication and request conventions).

A walkthrough of one authorization

Let’s tie the fields and the flow together with one realistic purchase: your cardholder carries a USD card and spends 3,000 JPY at a supermarket in Tokyo. Three details worth noting:
  • The two amount pairs are not duplicates: acquirerAmount/acquirerCurrency (3,000 JPY) is what the cardholder spent at the merchant; amount/currency (20.45 USD) is the settlement view converted at the network rate — freezing, settlement and reconciliation all follow the settlement view.
  • You only decide; you never move funds: after you return 00, DCS performs the freeze on the network side. If you return 01 (insufficient funds) or 11 (transaction not allowed), the flow ends at row three: the purchase fails at the till and no funds move.
  • The decision window is 2.5 seconds: a timeout is treated as 21 (no response) and real-time authorizations are never retried, so keep your whole chain — verify, decrypt, check limits — inside the window.
At this point the money’s life cycle is only half done — how the frozen 20.45 USD is actually debited on settlement day, and what happens when the settled amount differs from the frozen amount, is covered in Authorization and settlement: every scenario.

What authorization touches

  • Enterprise: the partner makes the decision, and the hold or release is booked against the enterprise security deposit or against the cardholder limits the partner maintains.
  • Card: every authorization request carries a cardId, and the card’s activated, frozen or canceled state determines whether the authorization can succeed. Freezing a card triggers the release of its holds.
  • Outstanding: the bridge between authorization and settlement. The authorization stage accumulates the held amount, and settlement draws it back down to zero. See Authorization and settlement.
  • Transaction: authorization comes first; a single transaction record can reference several authId values, and only approved authorizations ever produce a movement of funds.

Next steps