Skip to main content
The Three-Domain Secure (3D Secure or 3DS) API provides a decision service that accepts scoring events from the Marqeta platform and evaluates whether to apply strong customer authentication (SCA) with 3DS or to exempt. This implementation is based on the EMV 3-D Secure Protocol and Core Functions Specification. For more information, see the specification on the EMVCo website. The 3DS API is RESTful, so it uses HTTP methods (POST, PUT, GET) to perform functions on objects. For example, to determine whether to send an SCA challenge, send a POST request to the /three-ds/decision endpoint. Some requests include data in their message body. The 3DS API requires that data be in JSON format. The 3DS API provides endpoints that enable you to:
  • Delegate decisioning – determine whether to send an SCA.
  • Notify a 3DS completion status.
  • Receive an Advanced Authentication challenge.
  • Update an authentication result to Marqeta.
For more on 3D Secure, see About 3D Secure.

Available operations

3D Secure webhook events

In addition to the endpoints described above, the Marqeta platform sends two webhook events to your registered webhook endpoint for every 3D Secure authentication performed on your program: threedstransition.initialization, when an authentication begins, and threedstransition.completion, when the authentication reaches its final state. The two events are delivered independently, so design your integration to tolerate receiving a completion notification without a matching initialization notification, or a notification not arriving at all. Ordering between the two events is not guaranteed, so treat the completion notification as authoritative for the authentication outcome. Correlate the two notifications for a single authentication using acs_transaction_id. For sample notification payloads, see 3D Secure transition events in Event Types.
New properties and new allowable values can be added to these objects without notice. Ignore properties you don’t recognize, and treat an unrecognized allowable value as unknown rather than rejecting the payload.

Body field details

The initialization notification object

The completion notification object

The completion notification does not carry the requester object. Use card_acceptor for merchant details, or correlate back to the initialization notification using acs_transaction_id.

The device object

The requester object

Included on the initialization notification only.

The transaction object

The card_acceptor object

Included on both notifications, and the only merchant detail carried on the completion notification.

transaction_reason allowable values

The following values apply to the transaction_reason field, and are also part of the allowable values for cancel_reason.
FIDO_APPROVED, FIDO_REJECTED, FIDO_WITH_ASSURANCE_SIGNED, and FIDO_DELETION are net-new values, added to support Visa Payment Passkeys.
  • CARD_AUTHENTICATION_FAILED - Card authentication failed
  • UNKNOWN_DEVICE - Device is unknown
  • UNSUPPORTED_DEVICE - Device is unsupported
  • EXCEEDS_FREQUENCY_LIMIT - Exceeds the authentication frequency limit
  • EXPIRED_CARD - Card is expired
  • INVALID_CARD_NUMBER - Card number is invalid
  • INVALID_TRANSACTION - Transaction is invalid
  • NO_CARD_RECORD - No card record was found
  • SECURITY_FAILURE - Security failure
  • STOLEN_CARD - Card is reported stolen
  • SUSPECTED_FRAUD - Suspected fraud
  • TXN_NOT_PERMITTED_TO_CARDHOLDER - Transaction not permitted to the cardholder
  • CARDHOLDER_NOT_ENROLLED - Cardholder is not enrolled in the service
  • TRANSACTION_TIMEDOUT - Transaction timed out at the ACS
  • LOW_CONFIDENCE - Low confidence in the authentication
  • MEDIUM_CONFIDENCE - Medium confidence in the authentication
  • HIGH_CONFIDENCE - High confidence in the authentication
  • VERY_HIGH_CONFIDENCE - Very high confidence in the authentication
  • EXCEEDS_MAX_CHALLENGES - Exceeds the ACS maximum number of challenges
  • EXCEEDS_MAX_CHALLENGES_FOR_KBA - Exceeds the ACS maximum number of challenges for knowledge-based authentication
  • NON_PAYMENT_TRANSACTION_NOT_SUPPORTED - Non-payment transaction is not supported
  • THREE_RI_NOT_SUPPORTED - 3RI transaction is not supported
  • ACS_TECHNICAL_ISSUES - ACS technical issue
  • DECOUPLED_AUTHENTICATION_NOT_REQUESTED - Decoupled authentication is required by the ACS but was not requested by the 3DS Requestor
  • DECOUPLED_AUTHENTICATION_TIMED_OUT - 3DS Requestor decoupled maximum expiry time was exceeded
  • AUTHENTICATION_NOT_ATTEMPTED - Authentication was attempted but not performed by the cardholder
  • THREEDS_REQUESTOR_TRA_EXEMPTION - Transaction risk analysis was already performed
  • THREEDS_REQUESTOR_SCA_EXEMPTION - Strong customer authentication was already performed
  • THREEDS_REQUESTOR_DATA_SHARE_EXEMPTION - Data share only
  • CORPORATE_PAYMENT_EXEMPTION - Corporate payment exemption
  • MERCHANT_INITIATED_TRANSACTION_PAYMENT_EXEMPTION - Merchant-initiated transaction payment exemption
  • LOW_VALUE_PAYMENT - Low value payment
  • ISSUER_SCA_REQUIRED - Issuer requires strong customer authentication
  • NETWORK_SUSPECTED_BIN_ATTACK - Card network suspects a BIN attack
  • NPA_FRICTIONLESS - Non-payment authentication completed frictionless
  • PROGRAM_NOT_ENROLLED_V220 - Program is not enrolled for 3DS version 2.2.0
  • FIDO_APPROVED - Passkey registration approved following a successful challenge
  • FIDO_REJECTED - Passkey registration declined following a successful challenge
  • FIDO_WITH_ASSURANCE_SIGNED - Passkey transaction with assurance signed
  • FIDO_DELETION - Authentication completed frictionless because the request was to delete a passkey

cancel_reason allowable values

cancel_reason is deprecated. The Marqeta platform continues to send this field for backward compatibility, but its value is outdated.
In addition to the transaction_reason allowable values, cancel_reason accepts the following cancellation-specific values:
  • CARDHOLDER_CANCEL - Challenge was cancelled by the cardholder
  • CHALLENGE_CANCELLED_BY_TRANSACTION_ERROR - Challenge was cancelled due to a transaction error
  • TIMED_OUT_AT_ACS - Transaction timed out at the ACS; the intermediate CReq was not received by the ACS
  • TIMED_OUT_AT_ACS_NO_CREQ - Transaction timed out at the ACS; the first CReq was not received by the ACS
  • TIMED_OUT_AT_SDK - Transaction timed out at the SDK
  • TIMED_OUT_DECOUPLED_AUTHENTICATION - Transaction timed out during decoupled authentication
  • TIMED_OUT_OOB_AUTHENTICATION - Transaction timed out during out-of-band (OOB) authentication
  • UNKNOWN - Reason is unknown