<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Unified Checkout v1.1 /flex/v2/complete returns 400 MISSING_FIELD for card data with completeMandate in cybersource APIs</title>
    <link>https://community.developer.cybersource.com/t5/cybersource-APIs/Unified-Checkout-v1-1-flex-v2-complete-returns-400-MISSING-FIELD/m-p/95075#M4160</link>
    <description>&lt;P&gt;Hi CyberSource Support,&lt;/P&gt;&lt;P&gt;We are integrating Unified Checkout v1.1 with completeMandate for a Sale flow (authorization + capture + 3DS). The widget renders correctly,&lt;BR /&gt;Auth Setup completes, Device Data Collection succeeds, but the internal POST /flex/v2/complete call consistently returns 400 with&lt;BR /&gt;MISSING_FIELD.&lt;/P&gt;&lt;P&gt;Merchant ID: (test environment)&lt;/P&gt;&lt;P&gt;Issue: After the customer enters card details and the widget auto-submits, the SDK's internal call to&lt;BR /&gt;&lt;A href="https://testflex.cybersource.com/flex/v2/complete" target="_blank"&gt;https://testflex.cybersource.com/flex/v2/complete&lt;/A&gt; fails with:&lt;/P&gt;&lt;P&gt;{&lt;BR /&gt;"details": [&lt;BR /&gt;{"field": "paymentInformation.card.number", "reason": "MISSING_FIELD"},&lt;BR /&gt;{"field": "paymentInformation.tokenizedCard.expirationMonth", "reason": "MISSING_FIELD"},&lt;BR /&gt;{"field": "paymentInformation.card.expirationYear", "reason": "MISSING_FIELD"}&lt;BR /&gt;],&lt;BR /&gt;"reason": "MISSING_FIELD",&lt;BR /&gt;"status": "INVALID_REQUEST"&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;What works:&lt;BR /&gt;- /uc/v1/sessions returns a valid capture context JWT (type: uc-1.0.0, clientVersion: 1.1.1)&lt;BR /&gt;- VAS.UnifiedCheckout(sessionJWT) initializes successfully&lt;BR /&gt;- client.createCheckout({ autoProcessing: true }) succeeds&lt;BR /&gt;- checkout.mount() renders the widget with card entry + billing fields&lt;BR /&gt;- Auth Setup completes with a valid referenceId&lt;BR /&gt;- DDC completes successfully (Cardinal Commerce)&lt;BR /&gt;- Card data is entered by the user and the widget auto-submits&lt;/P&gt;&lt;P&gt;What fails:&lt;BR /&gt;- The SDK's internal POST /flex/v2/complete returns 400 INVALID_REQUEST&lt;BR /&gt;- CyberSource transaction path shows: Client App: unifiedCheckout, Reason Code: 101, Reply Message: The request data did not pass the required&lt;BR /&gt;fields check: [customer_cc_number, customer_cc_expmo, customer_cc_expyr]&lt;/P&gt;&lt;P&gt;const client = await VAS.UnifiedCheckout(sessionJWT);&lt;BR /&gt;const checkout = await client.createCheckout({ autoProcessing: true });&lt;BR /&gt;const result = await checkout.mount('#payment-buttons');&lt;BR /&gt;&lt;BR /&gt;Script loaded dynamically from capture context JWT clientLibrary field.&lt;BR /&gt;&lt;BR /&gt;This issue occurs on both test (apitest.cybersource.com) and production (api.cybersource.com) environments.&lt;BR /&gt;&lt;BR /&gt;The card data is encrypted and sent to /flex/v2/complete (confirmed via browser network tab), but the endpoint cannot extract the card fields&lt;BR /&gt;from the encrypted payload.&lt;/P&gt;&lt;P&gt;Capture context request:&lt;BR /&gt;{&lt;BR /&gt;"targetOrigins": ["&lt;A href="https://dev.test.local:6721" target="_blank"&gt;https://dev.test.local:6721&lt;/A&gt;"],&lt;BR /&gt;"clientVersion": "1.1",&lt;BR /&gt;"locale": "en_US",&lt;BR /&gt;"country": "KE",&lt;BR /&gt;"allowedCardNetworks": ["VISA", "MASTERCARD"],&lt;BR /&gt;"allowedPaymentTypes": ["PANENTRY"],&lt;BR /&gt;"captureMandate": {&lt;BR /&gt;"billingType": "PARTIAL",&lt;BR /&gt;"requestEmail": true,&lt;BR /&gt;"requestPhone": false,&lt;BR /&gt;"requestShipping": false,&lt;BR /&gt;"showAcceptedNetworkIcons": true&lt;BR /&gt;},&lt;BR /&gt;"completeMandate": {&lt;BR /&gt;"type": "CAPTURE",&lt;BR /&gt;"decisionManager": true,&lt;BR /&gt;"consumerAuthentication": "3DS"&lt;BR /&gt;},&lt;BR /&gt;"data": {&lt;BR /&gt;"clientReferenceInformation": { "code": "payment-uuid" },&lt;BR /&gt;"consumerAuthenticationInformation": {&lt;BR /&gt;"challengeCode": "04",&lt;BR /&gt;"messageCategory": "01",&lt;BR /&gt;"acsWindowSize": "01"&lt;BR /&gt;},&lt;BR /&gt;"orderInformation": {&lt;BR /&gt;"amountDetails": { "totalAmount": "2.00", "currency": "KES" },&lt;BR /&gt;"billTo": {&lt;BR /&gt;"firstName": "john",&lt;BR /&gt;"lastName": "doe",&lt;BR /&gt;"email": "test@gmail.com",&lt;BR /&gt;"address1": "P.O .BOX *",&lt;BR /&gt;"locality": "test",&lt;BR /&gt;"administrativeArea": "test",&lt;BR /&gt;"postalCode": "00",&lt;BR /&gt;"country": "KE",&lt;BR /&gt;"phoneNumber": "some phone"&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;</description>
    <pubDate>Thu, 09 Apr 2026 10:48:26 GMT</pubDate>
    <dc:creator>laflame</dc:creator>
    <dc:date>2026-04-09T10:48:26Z</dc:date>
    <item>
      <title>Unified Checkout v1.1 /flex/v2/complete returns 400 MISSING_FIELD for card data with completeMandate</title>
      <link>https://community.developer.cybersource.com/t5/cybersource-APIs/Unified-Checkout-v1-1-flex-v2-complete-returns-400-MISSING-FIELD/m-p/95075#M4160</link>
      <description>&lt;P&gt;Hi CyberSource Support,&lt;/P&gt;&lt;P&gt;We are integrating Unified Checkout v1.1 with completeMandate for a Sale flow (authorization + capture + 3DS). The widget renders correctly,&lt;BR /&gt;Auth Setup completes, Device Data Collection succeeds, but the internal POST /flex/v2/complete call consistently returns 400 with&lt;BR /&gt;MISSING_FIELD.&lt;/P&gt;&lt;P&gt;Merchant ID: (test environment)&lt;/P&gt;&lt;P&gt;Issue: After the customer enters card details and the widget auto-submits, the SDK's internal call to&lt;BR /&gt;&lt;A href="https://testflex.cybersource.com/flex/v2/complete" target="_blank"&gt;https://testflex.cybersource.com/flex/v2/complete&lt;/A&gt; fails with:&lt;/P&gt;&lt;P&gt;{&lt;BR /&gt;"details": [&lt;BR /&gt;{"field": "paymentInformation.card.number", "reason": "MISSING_FIELD"},&lt;BR /&gt;{"field": "paymentInformation.tokenizedCard.expirationMonth", "reason": "MISSING_FIELD"},&lt;BR /&gt;{"field": "paymentInformation.card.expirationYear", "reason": "MISSING_FIELD"}&lt;BR /&gt;],&lt;BR /&gt;"reason": "MISSING_FIELD",&lt;BR /&gt;"status": "INVALID_REQUEST"&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;What works:&lt;BR /&gt;- /uc/v1/sessions returns a valid capture context JWT (type: uc-1.0.0, clientVersion: 1.1.1)&lt;BR /&gt;- VAS.UnifiedCheckout(sessionJWT) initializes successfully&lt;BR /&gt;- client.createCheckout({ autoProcessing: true }) succeeds&lt;BR /&gt;- checkout.mount() renders the widget with card entry + billing fields&lt;BR /&gt;- Auth Setup completes with a valid referenceId&lt;BR /&gt;- DDC completes successfully (Cardinal Commerce)&lt;BR /&gt;- Card data is entered by the user and the widget auto-submits&lt;/P&gt;&lt;P&gt;What fails:&lt;BR /&gt;- The SDK's internal POST /flex/v2/complete returns 400 INVALID_REQUEST&lt;BR /&gt;- CyberSource transaction path shows: Client App: unifiedCheckout, Reason Code: 101, Reply Message: The request data did not pass the required&lt;BR /&gt;fields check: [customer_cc_number, customer_cc_expmo, customer_cc_expyr]&lt;/P&gt;&lt;P&gt;const client = await VAS.UnifiedCheckout(sessionJWT);&lt;BR /&gt;const checkout = await client.createCheckout({ autoProcessing: true });&lt;BR /&gt;const result = await checkout.mount('#payment-buttons');&lt;BR /&gt;&lt;BR /&gt;Script loaded dynamically from capture context JWT clientLibrary field.&lt;BR /&gt;&lt;BR /&gt;This issue occurs on both test (apitest.cybersource.com) and production (api.cybersource.com) environments.&lt;BR /&gt;&lt;BR /&gt;The card data is encrypted and sent to /flex/v2/complete (confirmed via browser network tab), but the endpoint cannot extract the card fields&lt;BR /&gt;from the encrypted payload.&lt;/P&gt;&lt;P&gt;Capture context request:&lt;BR /&gt;{&lt;BR /&gt;"targetOrigins": ["&lt;A href="https://dev.test.local:6721" target="_blank"&gt;https://dev.test.local:6721&lt;/A&gt;"],&lt;BR /&gt;"clientVersion": "1.1",&lt;BR /&gt;"locale": "en_US",&lt;BR /&gt;"country": "KE",&lt;BR /&gt;"allowedCardNetworks": ["VISA", "MASTERCARD"],&lt;BR /&gt;"allowedPaymentTypes": ["PANENTRY"],&lt;BR /&gt;"captureMandate": {&lt;BR /&gt;"billingType": "PARTIAL",&lt;BR /&gt;"requestEmail": true,&lt;BR /&gt;"requestPhone": false,&lt;BR /&gt;"requestShipping": false,&lt;BR /&gt;"showAcceptedNetworkIcons": true&lt;BR /&gt;},&lt;BR /&gt;"completeMandate": {&lt;BR /&gt;"type": "CAPTURE",&lt;BR /&gt;"decisionManager": true,&lt;BR /&gt;"consumerAuthentication": "3DS"&lt;BR /&gt;},&lt;BR /&gt;"data": {&lt;BR /&gt;"clientReferenceInformation": { "code": "payment-uuid" },&lt;BR /&gt;"consumerAuthenticationInformation": {&lt;BR /&gt;"challengeCode": "04",&lt;BR /&gt;"messageCategory": "01",&lt;BR /&gt;"acsWindowSize": "01"&lt;BR /&gt;},&lt;BR /&gt;"orderInformation": {&lt;BR /&gt;"amountDetails": { "totalAmount": "2.00", "currency": "KES" },&lt;BR /&gt;"billTo": {&lt;BR /&gt;"firstName": "john",&lt;BR /&gt;"lastName": "doe",&lt;BR /&gt;"email": "test@gmail.com",&lt;BR /&gt;"address1": "P.O .BOX *",&lt;BR /&gt;"locality": "test",&lt;BR /&gt;"administrativeArea": "test",&lt;BR /&gt;"postalCode": "00",&lt;BR /&gt;"country": "KE",&lt;BR /&gt;"phoneNumber": "some phone"&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;</description>
      <pubDate>Thu, 09 Apr 2026 10:48:26 GMT</pubDate>
      <guid>https://community.developer.cybersource.com/t5/cybersource-APIs/Unified-Checkout-v1-1-flex-v2-complete-returns-400-MISSING-FIELD/m-p/95075#M4160</guid>
      <dc:creator>laflame</dc:creator>
      <dc:date>2026-04-09T10:48:26Z</dc:date>
    </item>
  </channel>
</rss>

