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.

Delegate decisioning - determine whether to send an SCA

Action: POST
Endpoint: /three-ds/decision
Evaluate whether or not the cardholder will be prompted with a strong customer authentication (SCA) challenge to complete this authentication. To participate in the delegated decision service, your system must handle messages sent by the Marqeta platform and return the appropriate response. This is the URL of the decision service endpoint hosted in your environment, to which POST messages are submitted by the Marqeta platform.

Request header

Body field details

The following table describes the payload required to score an access control server (ACS) request.

The ThreeDSDecisionRequest object

The message_extension object

The requester object

The cardholder_authentication_by_merchant object

The prior_cardholder_authentication object

The sdk object

The server object

The client_browser object

The device object

The cardholder_account object

The phones object

The statistics object

The directory_server object

This object describes information from the Directory Services (DS) in the network.

The recurring object

The transaction object

Contains information about how the payment is being made.

The card_acceptor object

Warning
This object reports information as supplied by the merchant, and could contain inaccurate or unexpected values.

The risk_indicators object

The delivery object

The gift_cards object

The pre_order object

The whitelist object

The AddressPhysical object

Provides details related to the cardholder’s shipping/billing address.

The card_expiry_date object

ThreeDSDecisionResponse (response)

The response to an ACS decision request. Your decision service must respond to each delegated decision request with a decision of CHALLENGE, DECLINE, or EXEMPT. Ensure that your response body adheres to the specifications in this section. You must include all required fields regardless of whether you challenge or exempt the request.

APIResponseWithErrors (response)

A list of problems with the request that the caller might be able to fix.

Response codes

Sample request body

JSON

Sample response body

JSON

Notify a 3DS completion status

Action: POST
Endpoint: /three-ds/challenge-result
Informs the Delegated 3DS decision service whether or not the strong customer authentication (SCA) challenge has succeeded, which is required to evaluate future transactions. This is the URL of the notification endpoint hosted in your environment, to which POST messages are submitted by the Marqeta platform.

Body field details

The following table describes the payload required to score an ACS request.

The ThreeDSChallengeResultRequest object

DecisionServiceResponse (response)

Provides information regarding the call and how it was handled.

Response codes

Sample request body

JSON

Sample response

JSON

Receive an Advanced Authentication challenge

Action: POST
Endpoint: /three-ds/authentication
Stand up this endpoint to receive a cardholder challenge from Marqeta using Advanced Authentication. An Advanced Authentication request prompts you to challenge the cardholder using advanced methods such as biometrics or voice recognition. For details on the Advanced Authentication process, see Advanced Authentication and Advanced authentication lifecycle.

Request header

Body field details

The following table describes the payload required to authenticate a request.

The ThreeDSAuthenticationRequest object

The transaction object

Contains information about how the payment is being made.

The card_acceptor object

Warning
This object reports information as supplied by the merchant, and could contain inaccurate or unexpected values.

Response codes

Sample request body

JSON

Sample response

JSON

Update an authentication result to Marqeta

Action: POST
Endpoint URL: https://authentication-acs.marqeta.com/v3/three-ds/authentication-result
Accepts the 3DS out-of-band/decoupled challenge result and informs the ACS of the cardholder authentication result. Use your Marqeta Core API credentials.

Body field details

The following table describes the response to an ACS authentication request.

The ThreeDSAuthenticationResultRequest object

Response codes

Sample request body

JSON

Sample response

JSON

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