{
  "slug": "stripe-checkout-sessions-adds-contact-details-element-for-email-58bbbb913259",
  "title": "Stripe Checkout Sessions adds Contact Details Element for email",
  "tools": [
    "stripe"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-05-27T00:00:00.000Z",
  "announced_at": "2026-05-27T00:00:00.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "When integrating Elements with the Checkout Sessions API, use the Contact Details Element to collect and validate the customer’s email and help them sign in to Link.",
    "examples": [
      "const contactDetailsElement = checkout.createContactDetailsElement();\ncontactDetailsElement.mount(\"#contact-details-element\");",
      "<CheckoutElementsProvider clientSecret={clientSecret}>\n  <ContactDetailsElement />\n</CheckoutElementsProvider>"
    ],
    "gotchas": [
      "checkout (required): Checkout instance used to create the element.",
      "#contact-details-element (required): Selector for the DOM node where the element is mounted.",
      "clientSecret (required): Checkout Session client secret, or a promise resolving to it; passed to the React CheckoutElementsProvider.",
      "ContactDetailsElement (required): React component from `@stripe/react-stripe-js/checkout`; render inside CheckoutElementsProvider.",
      "Prerequisite: Create the Checkout Session server-side with `ui_mode` set to `elements`; return its client secret to the client.",
      "Prerequisite: For React, install and import React Stripe.js; the ContactDetailsElement must be inside CheckoutElementsProvider."
    ]
  },
  "why_it_matters": "When integrating Elements with the Checkout Sessions API, collect and validate a customer's email address without building a custom email form.",
  "before": "Build and validate a custom email input, then use `actions.updateEmail(email)` to update the customer’s email.",
  "sources": [
    "https://docs.stripe.com/changelog/dahlia/2026-05-27/add-contact-details-element-to-checkout",
    "https://docs.stripe.com/js/custom_checkout/create_contact_details_element and https://docs.stripe.com/js/element/mount",
    "https://docs.stripe.com/js/react_stripe_js/checkout/contact_details_element and https://docs.stripe.com/js/react_stripe_js/checkout/checkout_provider",
    "https://docs.stripe.com/js/custom_checkout/create_contact_details_element",
    "https://docs.stripe.com/js/element/mount",
    "https://docs.stripe.com/js/react_stripe_js/checkout/checkout_provider",
    "https://docs.stripe.com/js/react_stripe_js/checkout/contact_details_element",
    "https://docs.stripe.com/payments/quickstart",
    "https://docs.stripe.com/payments/quickstart and https://docs.stripe.com/js/react_stripe_js/checkout/contact_details_element",
    "https://docs.stripe.com/changelog/dahlia/2026-05-27/add-contact-details-element-to-checkout and https://docs.stripe.com/js/custom_checkout/update_email"
  ],
  "rank": 0.95024,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v2+judge-v2x3+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "wave1b-tools-20261017",
    "verdict_id": "wave1b-tools-20261017:wave1b-tools-20261017-94dfc09a57ef4d18-0:gate",
    "evidence_hash": "de780ed40e3f365cfe3f3e2807150fee6c936595ee6f10c7ffe4611b4c29c423"
  },
  "review": {
    "draft_hash": "1d16b549ba74c6c62e29070e67b3403ef3f4ab37788e75e7697a94f18c87024d",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T00:00:00.000Z",
    "decision": "wave1b-tools-20261017:gate",
    "reason": "3 of 3 judge runs approved with p_yes >= 0.9 (mean 0.95 >= 0.9; 2 needed) and Jev gave 0.68 (>= 0.6 needed)."
  }
}
